我是这个网站的新手,已经成功使用“HTML5”跨源资源共享 (CORS) 将数据发布到我的服务器。我最近刚刚尝试将 GET 包含在其中,因为我们正试图让我们所有的通信都不依赖于 JavaScript 库。在这样做的过程中,我遇到了一个奇怪的问题,这个问题对于 Firefox 来说似乎可以解决,但在所有 WebKit 浏览器中仍然存在问题。基本上任何返回 <200 或 >300 状态的东西都只是作为 0 状态进入。这使得几乎不可能进行错误处理。
对于 Firefox,我可以在请求的末尾放置一个随机字符串以防止它被缓存;从而至少修复了 304s。然而,这在 Chrome/Safari 中对我来说根本不起作用。这是我的代码示例:
xhr_request: function(type,url, data, callbacks, form){
var form = (typeof(form)!=="undefined")?form:null;
var xhr = new XMLHttpRequest();
var response;
data = com.ticommunity.obj_to_string(data);
xhr.open(type, url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("X-TxId", com.ticommunity.keyGen());
xhr.withCredentials = true;
xhr.send(data);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
response = xhr.responseText;
com.ticommunity.comm.request_callback(response, callbacks, form);
}else{`//****this is where the 0 Status keeps coming up***`
response = xhr.status;
com.ticommunity.comm.request_callback(response, callbacks, form);
}
}
}
}
有没有其他人遇到过类似的事情并提出了解决方法?我只是在做一些愚蠢的事情吗?非常感谢任何帮助。
编辑:我意识到 0 是根据规范应该发生的情况,但我真的需要能够捕获这些情况并进行一些其他处理。
最佳答案
我还没有具体看到这个问题,但我想知道您是否会使用不同的 xhr 事件(例如 xhr.onload)来获得更好的运气。您可以相信 onload 会在成功响应时触发,因此无需检查 xhr.status。如果您需要陷阱,这里有一个完整的事件列表:
关于firefox - 使用 HTML5 进行跨源资源共享的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3440371/