0

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

我有一个带有按钮和标签的简单网页。当我单击按钮时,我想对一个完全不同的域(跨域,我知道很多)进行 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 的情况下成功进行此调用吗?

4

1 回答 1

6

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

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

  1. 使用 JSONP。这有一些限制,包括它仅适用于 GET 请求,并且您发送请求的服务器必须支持它。
  2. 发出跨域资源共享 (CORS) 请求。这也必须得到您发送请求的服务器的支持。
  3. 在您自己的服务器上设置代理。在这种情况下,您可以在站点上设置一个端点来简单地中继请求。即您从您的服务器请求信息,您的服务器从另一台服务器获取信息并将其返回给您。

对于您的情况,如果其他服务器不支持其他选项,您似乎必须使用选项 3。

于 2013-03-30T07:44:22.857 回答