0

我通过getJSON为一个div加载图像url内容,完成后它会改变一个变量,所以我知道AJAX已经完成

其他函数如何知道 AJAX 完成了?这是我想要的:

用户导航到专辑 div 然后它将检查 AJAX 是否完成。如果 AJAX 没有完成,则显示加载图像,但是当 AJAX 完成时,如何知道 AJAX 完成停止显示加载图像?

我的想法:

1/ 使用 while 循环不断检查 AJAX 状态变量将冻结所有内容,实际上不起作用。

2/ 我不能把所有的导航代码放在回调函数中,因为我希望用户可以在 AJAX 加载时自由地做。把它全部放在回调函数中会产生一团糟的代码

如何解决这个问题?

4

5 回答 5

3

您永远不应该通过轮询变量来“检查”AJAX 是否完成,您应该注册一个回调,该回调将在完成时自动调用,最好使用 jQuery 的“延迟对象”,例如

$.getJSON(...).done(function(data) {
    // my ajax is finished!
});

最终,您不必将所有代码都放在回调中,但您需要确保它最终回调调用。

于 2013-05-30T11:04:32.607 回答
2

在 ajax 调用中有一个名为“成功:函数(数据)”的扩展,数据包含您从请求中获得的任何内容。

   $.ajax({
   type: "POST",
   dataType="json",
   url:url,
   data:{id:x},
   success : function(result){
   //stop loading message here
   }
于 2013-05-30T11:08:18.290 回答
1

您可以使用全局 ajax:{对于不需要显示任何加载图像的请求,可以使用选项global:false}

$(document).on('ajaxStart',function(event, jqxhr, settings){
    //show loading img
})
.on('ajaxComplete',function(event, jqxhr, settings){
    //hide loading img
})
于 2013-05-30T11:06:47.010 回答
1

检查您有“完成”回调的文档

于 2013-05-30T11:06:52.913 回答
0
$.ajax({
   type: "POST",
   dataType : "json",
   ...
}).done(function(data) {
 // Stuff you want to do after ajax complete
});

或者

$(document).ajaxComplete(function() {
   // Ajax Completed
});
于 2013-05-30T12:33:49.587 回答