跨域 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 请求的主要内容,如果未能解决你的问题,请参考以下文章
腾讯地图 webservice api get 请求 返回值 跨域
jquery中$.get()如何让跨域请求携带cookie?