这是我第一次使用ajax。我不知道ajaxStop发生在哪里。我使用ajaxStart来显示加载图像,需要ajaxStop来隐藏加载图像。请帮忙。
我有这个代码从“PageOne”
调用弹出窗口function ShowFixSteps(path, title){
var winHeight = parseInt(jQuery(window).height() - 100);
var winWidth = parseInt(jQuery(window).width() - 600);
jQuery.ajax({
url: path,
success: function(data) {
jQuery("#divPopup").load(path).dialog({
modal: true,
width: winWidth,
height: winHeight,
title: title,
position: "center"
});
}
});
jQuery("#divPopup").bind("dialogbeforeclose", function(){
jQuery("#divPopup").empty('');
});
}
在我的母版页面上,我有这段代码来检查ajax调用的开始和停止:
$(document).ajaxStart(function() {
alert('start');
});
$(document).ajaxStop(function() {
alert('stop');
});
$(document).ajaxError(function() {
alert('error');
});
它警告START但不警告STOP:也没有错误。
注意:START和STOP警报适用于Chrome,但不适用于IE。
答案 0 :(得分:2)
答案 1 :(得分:2)
您可以通过以下方式使用.ajaxStop()
:
$(document).ajaxStop(function() {
$('#loading-spinner').hide();
});
或者您可以将:complete
回调添加到您的AJAX函数中,如下所示:
jQuery.ajax({
url: path,
success: function(data) {
jQuery("#divPopup").load(path).dialog({
modal: true,
width: winWidth,
height: winHeight,
title: title,
position: "center"
});
},
complete: function() {
// do something here when ajax stops
// like hiding the spinner or calling another function
}
});
正如您在一条评论中提到的,如何停止AJAX请求,具体如下:
var ajax1 = $.ajax({
type: "POST",
url: "some.php",
...
});
ajax1.abort()
通过执行此操作,您可以在中止之前检查特定的AJAX请求是否正在运行:
if (ajax1) {
ajax1.abort();
}
或者您可以通过执行以下操作来检查是否正在运行任何 ajax请求:
var ajax_inprocess = false;
$(document).ajaxStart(function() {
ajax_inprocess = true;
});
$(document).ajaxStop(function() {
ajax_inprocess = false;
});
if (ajax_inprocess == true) {
request.abort();
}
请注意使用.abort()
,因为它只会阻止客户端代码侦听响应,它实际上不会阻止服务器工作。实际上有一些主要的注意事项,所以请务必先阅读。
更新问题的更新答案
对于IE问题,请尝试使用:
$(document).ajaxComplete(function() {
// do something
})
而不是ajaxStop()
。每次AJAX请求完成时都会触发ajaxComplete()
,而不是使用ajaxStop()
完成所有请求。也许它会有所帮助,也许不会。