我在我的一个项目中使用了一个URL,它运行得很好。我从一个Web服务器发出请求,到另一个IP地址,调用以这种格式输出数据的页面:
[{"PhoneNumber":"+123456789","Name":"Mark"},
{"PhoneNumber":"+123456789","Name":"Josh"},
{"PhoneNumber":"+123456789","Name":"Alex"},
{"PhoneNumber":"+123456789","Name":"John"},
{"PhoneNumber":"+123456789","Name":"Sean"}]
我可以通过函数调用来获取和处理这些数据,例如:
$.ajax({
url: serverAddress + "/getpeople",
dataType: "jsonp",
timeout: 4000,
success: function(response) {
for(var i in response) {
alert(response[i].Name);
}
}
});
这让我很困惑。从我到目前为止所学到的JSONP,它实际上不是数据,而是一个函数。所以响应应该包含在函数调用中,例如callback()
,然后我可以在我的项目中实现function callback(data) {}
来处理数据。
但在这种情况下,数据似乎只是JSON数据,我认为应该导致产生跨源错误?但事实并非如此。
当我尝试从同一台服务器调用另一个URL,获取一个普通的纯文本文件时,我确实收到了一个跨源错误,它在控制台中抱怨:
原因:CORS标题'Access-Control-Allow-Origin'缺失
但原始getpeople
网址也没有该标头。当我在Firefox的文档检查器中检查响应头时,所有头都是:
Connection: "close"
Content-Type: "text/html;charset=utf-8"
Date: "Mon, 5 Oct 2015 08:29:07 GMT"
Server: "ServerName/1.1.10011.2211"
所以:
Access-Control-Allow-Origin
标题为什么这样做?