使用HTML5进行跨源资源共享的问题

时间:2010-08-09 13:18:44

标签: firefox html5 webkit xmlhttprequest cross-domain

我是这个网站的新用户,并成功使用“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是按照规范应该发生的事情,但我真的需要能够捕获这些情况并进行其他处理。

1 个答案:

答案 0 :(得分:0)

我没有具体看过这个问题,但我想知道你是否有更好的运气使用不同的xhr事件,例如xhr.onload。您可以信任onload来触发成功的响应,因此无需检查xhr.status。如果你需要陷入别的东西,这里有一个完整的事件清单:

http://www.w3.org/TR/XMLHttpRequest2/#events