最近做项目用到了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();
客户端回结束此次连接,但是如果网络没问题的话服务器仍然会接受到该此请求的内容,所以会不会有比较极端的情况,本来网络异常,然后在你定时器方法内取消了请求后,这时网络又恢复正常,服务器会不会收到这条消息,可能说得比较绕你明白我的意思了吗……

还有我看到你对这块做了处理,但是这样的话应该会造成客户端服务器不同步的问题吧……服务器我是完全不懂
我也不懂服务器的东西,上面的代码是我网上抄的然后自己改了一点点
,但是目前没发现什么问题(也有可能我没搞服务器,出现问题也没发现
)
应该不会吧,不是都取消请求了嘛
不同步是什么情况?
没事了,之前想的太多了,这样看暂时够用了,以后发现问题再改吧……