我有一个沉重的应用程序,其中一切都在ajax。
现在有时候当一个页面加载时会有10个以上的ajax请求,其中一些会因为一个未知的原因而随机失败。
无论如何都知道为什么这些请求失败了?
我可以捕获错误内部的错误:{}情况,我是否应该在发生故障时再次调用Ajax函数或者它不是一个好主意(避免循环)?
这是我用来处理所有请求的Ajax函数:
function ajax(aurl,dataType,requestData,successListener,compelteListener,errorListener,async) {
var $xhr=null;
async = typeof async !== 'undefined' ? async : true;
if($.ajax) {
$xhr=$.ajax({
type: 'post',
url : aurl,
async : async,
dataType : dataType,
data:requestData,
success: function(response){
checkAjaxResponse(null,response,successListener,errorListener);
},
complete:compelteListener,
error:function(response){
checkAjaxResponse(null,response,errorListener);
}
});
}else {
alert("jquery not found ..");
}
return $xhr;
}
更新1:
如果我在错误内的响应中执行了console.log,我会得到以下结果:
{"readyState":0,"responseText":"","status":0,"statusText":"error"}
更新2:
查看apache日志,我看到很多:
[notice] Parent: child process exited with status 255 -- Restarting.
我还将我的ajax请求修改为:
error:function(response){
ajax(aurl,dataType,requestData,successListener,compelteListener,errorListener,async);
}
但如果Ajax总是失败,那可能会导致系统崩溃......
更新#3
我认为它更像是一个WAMP问题,因为我没有那些生产错误。
无论如何,谢谢大家的努力!
答案 0 :(得分:0)
问题与Windows上的Apache有关,原因不明,服务器随机崩溃。
我在httpd上发现了一些与堆栈有关的信息(默认情况下1mb windows默认情况下vs 8mb默认情况下)
我们的制作是linux和windows上的开发。
将功能修改为以下内容:
error:function(response){
counter++;
checkAjaxResponse(null,response,errorListener);
if(counter > 5) {
jAlert(get_label('technical_error') + '<br><br>' + get_label('function_called')+ aurl,get_label('attention_loading'));
setLoading(false);
} else {
return ajax(aurl,dataType,requestData,successListener,compelteListener,errorListener,async,counter);
}
}