我正在尝试使用
JQuery.ajax从本地文件(file://)执行XMLHttpRequest到http://上的某些内容,并且我可以看到它看起来就像请求已经发出(成功回调被调用,Firebug显示)请求),但根本没有回复.
这基本上就是我在做的事情:
$.ajax({
url: "https://stackoverflow.com/users/63736/bruce-van-der-kooij",
dataType: "text",
success: function(text) {
alert(text)
}
})
注意我使用的是数据类型:“text”但是你使用的并不重要.
这将显示空警报.
现在,如果我不得不猜测我必须说这与相同的原始策略有关,但我没有得到典型的NS_ERROR_DOM_SECURITY_ERR异常(错误控制台中根本没有任何内容).
那么有人会对正在发生的事情做出解释吗?
有关
> Problem with making a simple JS XmlHttpRequest call
更新:
所以我遇到了July 2009 article at hacks.mozilla.org似乎解释了将要发生的事情.显然,Firefox> = 3.5实现了Cross-Origin Resource Sharing (CORS) specification,它提供了一种允许您进行跨站点请求的机制.在这种情况下发生的事情在文章中解释:
In Firefox 3.5 and Safari 4, a cross-site XMLHttpRequest will not successfully obtain the resource if the server doesn’t provide the appropriate CORS headers (notably the Access-Control-Allow-Origin header) back with the resource, although the request will go through.
请注意,在我的情况下,请求将使用标头Origin:null发送,并返回200 OK响应.但是,服务器不会发回适当的标头,因此不会检索响应正文.
另见:
> Mozilla Developer Center – HTTP access control
最佳答案 (回答我自己的问题)
请求退出的原因是因为Firefox> = 3.5实现了Cross-Origin Resource Sharing (CORS) specification,它提供了一种机制,允许您进行跨站点HTTP请求.默认情况下,这些请求不会发送任何凭据(HTTP Cookie和HTTP身份验证信息).
但是,如果服务器未向资源提供适当的CORS标头(特别是Access-Control-Allow-Origin),则跨站点HTTP请求将无法成功获取资源.浏览器将忽略响应.
以下是成功跨网站请求的示例(它检索我的YouTube个人资料):
$.ajax({
url: "http://gdata.youtube.com/feeds/api/users/brucevdk?v=2&alt=json",
dataType: "json",
success: function(response) {
alert(response)
}
})
如果您查看响应标头,您会看到:
Access-Control-Allow-Origin: *
这意味着“允许来自任何来源的请求”.
资源
> Mozilla Developer Center – HTTP access control
> cross-site xmlhttprequest with CORS