在不使用JSON的情况下在JavaScript中进行REST调用?

时间:2013-03-30 07:26:22

标签: javascript rest http-get

(非常无知的问题,我坦率地承认)

我有一个简单的网页,上面有一个按钮和一个标签。当我单击按钮时,我想对一个完全不同的域(跨域,我知道很多)进行REST调用,并在标签中显示结果(HTML)。

使用其他API,我已经玩过使用JSON / P并动态添加元素,但是这个特殊的API不支持JSON,因此我不确定如何成功通过。

我的代码是:

    function getESVData() {
    $.get('http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=John+1', function (data) {
        $('#bibleText').html(data);
        app.showNotification("Note:", "Load performed.");
    });
}

我收到“访问被拒绝”。无论如何在没有JSON的情况下成功调用此调用?

1 个答案:

答案 0 :(得分:6)

首先,JSON和JSONP不一样。 JSON是一种表示信息的方式,JSONP是围绕同源策略的黑客攻击。 JSONP通过从另一个域请求信息来工作,并且该域返回一个脚本,该脚本使用该信息调用函数(使用您提供的名称)。您确实在您的网站上执行了另一个域提供给您的脚本,因此您应该信任其他域。

现在,在尝试制作跨域请求时,您基本上有3个选项:

  1. 使用JSONP。这有一些限制,包括它只适用于GET请求,而您发送请求的服务器必须支持它。
  2. 进行跨源资源共享(CORS)请求。您发送请求的服务器也必须支持此功能。
  3. 在您自己的服务器上设置代理。在这种情况下,您可以在站点上设置一个只是中继请求的端点。即,您从服务器请求信息,您的服务器从其他服务器获取信息并将其返回给您。
  4. 根据您的情况,其他服务器不支持其他选项,您似乎必须使用选项3。