我正在尝试调用此网络服务:http://www.civicapps.org/datasets/restaurant-inspections
这是我的代码:
<script>
$(document).ready(function() {
function showInspections() {
var data = $.ajax({
type : 'GET',
url : '//api.civicapps.org/restaurant-inspections/',
async : false,
dataType : 'json',
success: function(data){
if(data.status == "ok"){
alert(data);
}
}
});
}
showInspections();
});
</script>
Firebug Net&gt; XHR显示&#34; 200状态OK&#34;然而,JSON数据没有响应。同样,“控制台”选项卡显示相同的GET请求和状态,但其文本为红色。
问题:
答案 0 :(得分:8)
由于跨域问题,我是否未能收到JSON中的响应数据,即数据应该以JSONP而不是JSON发送?
是。 JSONP实际上与“JSON”(即返回JSON格式数据的AJAX请求)非常不同。尽管响应看起来非常相似,并且jQuery中的实现非常相似(只需添加'p'!),但JSONP的实际架构却截然不同。事实上,JSONP甚至不是AJAX(如果用AJAX你的意思是使用XMLHttpRequest
)。 JSONP通过使用涉及动态生成的<script>
元素的技巧来解决跨域问题。
如果是这样,假设响应不会在JSONP中发送,有没有办法完全解决这个问题?
幸运的是,没有。虽然这对于你来说可能是不幸的,但它对网络来说是幸运的。因为如果你可以从客户端解决跨域问题,那么网络就不那么安全了。想象一下,你去了我的网站,一些隐藏的JavaScript从Gmail下载了你所有的新电子邮件,解析了它们,然后发送到我的服务器。如果不是同源政策,这是可能的。
JSONP很不错,因为它为服务可以选择加入的跨源请求提供了一种解决方法。如果服务想要跨域访问,那么它可以用JSONP编写。这可以防止不知情的跨域服务,同时允许服务自愿跨域可用性。
Firebug控制台中的红色文字表示什么?
这可能表示违反同源政策。