【问题标题】:Make REST call in JavaScript without using JSON?在 JavaScript 中进行 REST 调用而不使用 JSON?
【发布时间】:2013-03-20 21:58:06
【问题描述】:

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

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

【问题讨论】:

  • 在这种情况下,您不能使用 AJAX(直接)执行此操作,因为它们没有实现 CORS。因此,您必须编写代理脚本,将其托管在您的服务器上并向其发出 AJAX 请求。

标签: javascript rest http-get


【解决方案1】:

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

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

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

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

【讨论】:

  • 关于#3,我相信已经有了现成的解决方案。尝试查找 SimplePHPProxy
猜你喜欢
  • 2013-06-12
  • 1970-01-01
  • 2020-08-07
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多