请教下xmlHttpRequest的问题

最近做项目用到了xmlHttpRequest的东西,现在需要自己写客户端的网络部分,目前我了解的资料,onreadystatechange方法里是通过readyState和state来判断是否正常接收了回调
但是我想问下异常状态该怎么处理啊?比如说服务器未打开,网络异常,超时等等该怎么处理?谢谢

。。。state不单单可以接收正常的code,还可以接收不正常的

关键是现在在服务器未打开的情况下没有给我返回state…不知道为啥
Simulator: Response failed, error buffer: Failed to connect to 192.168.0.45 port 8080: Timed out
只有一句这个提示

另外超时应该是客户端本地处理吧

可以搜下ajax 我不是很懂这个

这是我的代码,你可以参考一下

//网络请求(url,超时限制,请求成功回调,请求失败回调,发送数据)
var XML_HTTP_REQUEST = function(url, timeout, successCallback, failedCallback, sendData){
    //url = encodeURI(url);
    cc.log("url = " + url);
    var request = new XMLHttpRequest();
    var time = false;//是否超时
    var timer = setTimeout(function(){
        time = true;
        request.abort();//请求中止
        if(typeof failedCallback != "undefined"){
            failedCallback("请求超时");
            cc.log("XML_HTTP_REQUEST 请求超时");
        }
    },timeout);
    request.onreadystatechange = function(){
        if(request.readyState == 4) {
            cc.log("XML_HTTP_REQUEST request.readyState == 4");
            if(time) return;//请求已经超时,忽略中止请求
            clearTimeout(timer);//取消等待的超时
            if(request.status == 200){
                cc.log("XML_HTTP_REQUEST request.status == 200");
                successCallback(request.responseText);
            }else{
                if(typeof failedCallback != "undefined"){
                    failedCallback("请求失败");
                }
            }

        }
    }
    if(typeof sendData == "undefined"){
        request.open("GET",url, true);
        request.send();
        cc.log("XML_HTTP_REQUEST get open");
    }else{
        request.open("POST", url, true);
        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        if(typeof sendData == "string"){
            request.send(sendData);
            cc.log("post send data is " + sendData);
        }else{
            var str = "";
            for (var key in sendData) {
                if (sendData.hasOwnProperty(key)) {
                    var element = sendData[key];
                    str += key + "=" + element + "&";
                }
            }
            str.substring(0, str.length -1);
            cc.log("post send data is " + str);
            request.send(str);
        }
        
    }

};

我也是这么想的,用定时器控制超时…不过abort()方法好像有点问题,我之前试的如果正常连接发送消息的话
就是这样
xhr.send();
xhr.abort();
客户端回结束此次连接,但是如果网络没问题的话服务器仍然会接受到该此请求的内容,所以会不会有比较极端的情况,本来网络异常,然后在你定时器方法内取消了请求后,这时网络又恢复正常,服务器会不会收到这条消息,可能说得比较绕你明白我的意思了吗……:joy::joy:

还有我看到你对这块做了处理,但是这样的话应该会造成客户端服务器不同步的问题吧……服务器我是完全不懂:joy:

我也不懂服务器的东西,上面的代码是我网上抄的然后自己改了一点点:joy:,但是目前没发现什么问题(也有可能我没搞服务器,出现问题也没发现:joy:

应该不会吧,不是都取消请求了嘛

不同步是什么情况?

没事了,之前想的太多了,这样看暂时够用了,以后发现问题再改吧……