【问题标题】:Cross Origin GET Request跨域 GET 请求
【发布时间】:2015-01-17 09:54:36
【问题描述】:

我可以通过我的浏览器以及我为 Chrome(即 Postman)https://transitdata.phoenix.gov/api/tripupdates?format=json987654321@ 拥有的 RESTclient 插件成功地访问此端点

但是,当我从我的应用发送 GET 请求时,我得到:

No 'Access-Control-Allow-Origin' header is present on the requested resource

GET 请求示例

jQuery.ajax({
  url: 'https://transitdata.phoenix.gov/api/tripupdates?format=json',
  type: 'GET',
  success: function (data) {
      console.log(data);
  }
});

如果我发送 JSONP(带有回调),我仍然会得到:

Unexpected Token :

JSONP 请求示例

$.ajax({
    url: "https://transitdata.phoenix.gov/api/tripupdates?format=json&callback=parseResponse",
    dataType: "jsonp",
    success: function( response ) {
        console.log( response ); // server response
    }
});

我不确定我在这里做错了什么。有什么建议吗?

【问题讨论】:

  • 跨域请求,无论是使用 CORS 还是 JSONP,都需要服务器的支持——CORS 通过响应标头,JSONP 通过响应正文“填充”。此服务器可能还没有实现。

标签: jquery ajax json jsonp cors


【解决方案1】:

服务器的输出实际上并未将结果包装在您的回调函数中,因此服务器似乎不支持JSONP

下一个最佳选择可能是让本地代理为您获取数据。

编辑

服务器返回原始 JSON:

{"header":{"gtfs_realtime_version":"1","incrementality" //snip

您对JSONP 的支持服务器的期望是:

callbackName({"header":{"gtfs_realtime_version":"1","incrementality" //snip

您的代理服务器将位于您的同一个域中,并会为您获取该 JSON,然后将其返回到您的脚本,从而避免您看到的跨域问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-24
    • 2017-09-12
    • 2014-02-09
    • 2018-12-31
    • 2017-06-15
    相关资源
    最近更新 更多