我目前正在使用 ajaxStart、ajaxStop 和 ajaxSetups 在使用 jQuery 的 .load() 函数加载页面时成功显示“加载”div。
我想做的是在ajax请求期间添加一个“这需要一段时间”警告,比如谷歌地图......
因此,在 ajaxStart 触发 5 秒后,“LOADING” div 变为“这很慢”。然后应该在 ajaxStop 上消失....
我目前拥有的(如下)不起作用。在加载页面时,“LOADING” div 会正确显示和消失,但在 5000 毫秒后出现“这很慢”错误,尽管页面已成功加载。
$.ajaxSetup({
error:function(x,e){
if('parsererror'==e) {
$('.ajax-warning, ajax-errors').fadeOut('fast');
$('#technical-error').fadeIn('fast');
window.setTimeout(function(){
$("#technical-error").fadeOut('fast');
}, 3000);
} else if('timeout'==e) {
$('.ajax-warning, ajax-errors').fadeOut('fast');
$('#timeout-error').fadeIn('fast');
}
else if ( "status" in x ) {
if(0 == x.status){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$('#offline-error').fadeIn('fast');
window.setTimeout(function(){
$("#offline-error").fadeOut('fast');
}, 3000);
}else if (404 == x.status){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$('#404-error').fadeIn('fast');
window.setTimeout(function(){
$("#404-error").fadeOut('fast');
}, 3000);
}else if(500 == x.status){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$('#500-error').fadeIn('fast');
window.setTimeout(function(){
$("#500-error").fadeOut('fast');
}, 3000);
}
}
else {
$('.ajax-warning, ajax-errors').fadeOut('fast');
$('#unknown-error').fadeIn('fast');
window.setTimeout(function(){
$("#500-error").fadeOut('fast');
}, 3000);
}
}
});
$(document).ajaxStart(function(){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$("#loading-warning").fadeIn('fast');
window.setTimeout(function(){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$("#timeout-error").fadeIn('fast');
}, 5000);
});
$(document).ajaxStop(function(){
$("#loading-warning").fadeOut('fast');
clearTimeout();
});
$(document).ajaxError(function(){
$('.ajax-warnings').fadeOut('fast');
$('#loading-error').fadeIn('fast');
window.setTimeout(function(){
$("#loading-error").fadeOut('fast');
}, 3000);
});
如果有人能指出我正确的方向,将不胜感激!
更新:
作为对 Korvin 的回应,我现在有以下代码 - 现在根本不会出现超时错误。
var loadingTimer = setTimeout(function(){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$("#timeout-error").fadeIn('fast');
}, 5000);
$(document).ajaxStart(function(){
$('.ajax-warning, ajax-errors').fadeOut('fast');
$("#loading-warning").fadeIn('fast');
setTimeout(loadingTimer);
});
$(document).ajaxStop(function(){
$("#loading-warning").fadeOut('fast');
clearTimeout(loadingTimer);
});