跨域 GET 请求

Posted

技术标签:

【中文标题】跨域 GET 请求【英文标题】:Cross Origin GET Request 【发布时间】: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 通过响应正文“填充”。此服务器可能还没有实现。 【参考方案1】:

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

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

编辑

服务器返回原始 JSON:

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

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

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

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

【讨论】:

以上是关于跨域 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

get请求与post,跨域

腾讯地图 webservice api get 请求 返回值 跨域

请求腾讯地图webServiceAPI 跨域问题

jquery中$.get()如何让跨域请求携带cookie?

如何解决微信上跨域请求withCredentials带不上cookie

thinkphp 怎么写跨域请求接口