jquery函数如何知道AJAX已经完成

时间:2013-05-30 11:02:22

标签: jquery ajax getjson

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

其他功能如何知道AJAX已完成?这就是我想要的:

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

我的想法:

1 /使用while循环连续检查AJAX状态变量会冻结所有内容但实际上不起作用。

2 /我无法将所有导航代码放在回调函数中,因为我希望用户可以在加载AJAX时自由进行。将它全部放在回调函数中会产生一堆代码

如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

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

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

最终,您不必将所有代码放入回调中,但您需要确保它最终通过回调调用

答案 1 :(得分:2)

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

   $.ajax({
   type: "POST",
   dataType="json",
   url:url,
   data:{id:x},
   success : function(result){
   //stop loading message here
   }

答案 2 :(得分:1)

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

$(document).on('ajaxStart',function(event, jqxhr, settings){
    //show loading img
})
.on('ajaxComplete',function(event, jqxhr, settings){
    //hide loading img
})

答案 3 :(得分:1)

检查您有“complete”回拨

的文档

答案 4 :(得分:0)

$.ajax({
   type: "POST",
   dataType : "json",
   ...
}).done(function(data) {
 // Stuff you want to do after ajax complete
});

OR

$(document).ajaxComplete(function() {
   // Ajax Completed
});