我注意到Safari中jQuery的这种奇怪行为。设置完呼叫后如下:
$.ajax( {
'url' : url,
'dataType' : 'json',
data : reqdata,
timeout: 20000, //10 secs of timeout
success : function(data, textStatus, XMLHttpRequest) {
console.log("success");
if ((data === null) || (data.length == 0)) {
ts.doAction( {
'actionName' : 'timeout',
'request' : {
'reqdata' : reqdata,
'actionName' : actionName,
'url' : url
},
'controller' : ts
});
}
ts.doAction( {
'actionName' : actionName,
'data' : data
});
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error: " + textStatus);
if (textStatus == "timeout") {
ts.doAction( {
'actionName' : 'networkFailureError',
'request' : {
'reqdata' : reqdata,
'actionName' : actionName,
'url' : url
},
'controller' : ts
});
} else {
ts.doAction( {
'actionName' : 'serverError',
'request' : {
'reqdata' : reqdata,
'actionName' : actionName,
'url' : url
},
'controller' : ts
});
}
}
});
如果发生超时(我关闭本地网络服务器),将调用'success'方法!在textStatus参数中,有一个字符串有“成功”!!!错误处理程序甚至没有被调用....(你可能会注意到我必须告诉问题的唯一方法,就是检查数据参数,如果它是null或0长...为什么这种行为?怎么能我避免这个?
答案 0 :(得分:1)
我遇到了同样的问题。
我发现它取决于超时时间。使用chrome,超过2000毫秒的超时,一切都按预期工作,但是为了更长的超时,不会调用成功处理程序。
答案 1 :(得分:0)
听起来你的请求正在被缓存。
尝试设置$.ajax
选项的cache: false
来电。根据{{3}}:
如果设置为false,它将强制执行 您请求不是的页面 由浏览器缓存。
您可能还想通过使用Firebug,Fiddler或其他一些Web请求监控工具查看请求/响应来验证您的请求的响应是否正在缓存。