http://www.w3.org/TR/access-control/
阅读上面链接的CORS规范,似乎是无法可靠地区分通用“网络错误”和跨域访问拒绝错误的情况。来自规范:
如果出现网络错误请应用网络错误步骤。
执行资源共享检查。如果它返回失败,请应用网络错误步骤。
http://www.w3.org/TR/access-control/#simple-cross-origin-request0
在我的测试中,我找不到Firefox实现的任何功能,似乎表明资源共享检查肯定失败了。它只是将readyState切换为4并将状态设置为0。
最终,我希望能够将成功回调,一般失败回调和可选的跨源失败回调传递给我的函数。感谢您的帮助或见解。
答案 0 :(得分:0)
您可能不需要让XHR请求知道何时会发生跨源错误。请尝试以下基于jQuery的$.get
:
var xhr = {
get: function(url, data, callback, dataType) {
if ( !this.isSameOrigin(url) ) {
callback(null, "Same-origin error or whatever", null);
}
$.get(url, data, callback, dataType);
},
isSameOrigin: function(url) {
// Do a string comparison against window.location. Get as complicated
// as you'd like
return !!(
// Url doesn't contain a valid protocol (relative to domain))
!url.match(/^https?:\/\//i) ||
// Url contains a protocol but the request is to the current domain
url.match(new RegExp("^https?://" + window.location.host, "i"))
);
}
};