2013-05-30 131 views
0

我加载图片的网址内容供的getJSON一个div AJAX完成,当它完成它会改变一个变量,所以我知道AJAX做如何jQuery函数知道

如何等功能知道Ajax是做什么?这是我想要的:

用户导航到相册的div,然后它会检查AJAX是否完成。如果没有完成AJAX,会显示一个加载图像,但是当AJAX完成时,如何知道AJAX已完成以停止显示加载图像?

我的想法:

1 /使用while循环将冻结一切,其实并不连续工作检查AJAX状态变量。

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

这个问题怎么解决?

回答

3

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

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

最终你不必把所有的代码回调,但你必须确保它结束了由回调称为

+0

我仍然无法得到的想法。正如我已经说过的,如果我将导航代码放在回调函数中,那么它将冻结,直到那个。我需要的是导航代码的方法来了解AJAX是否已完成 – user2174870

+0

@ user2174870除非您在其他地方使用“繁忙循环”,否则不应使用此代码“冻结”。你的导航代码不应该运行_continuously_JS代码应该只运行在某种事件的响应,然后只是简单地运行。然后浏览器将闲置,直到收到下一个事件。 – Alnitak

+0

@ user2174870 p.s.你在问题中说:“不断检查状态......会冻结一切” - 这是正确的。使用回调函数是_prevent_ freeze的方法,但这只是正确构造代码的一种情况,以免“创建一堆代码”。使用延迟对象可以显着改善异步代码,因为它有助于消除深层嵌套。 – Alnitak

1

您可以使用全局AJAX:{对于要求您不必表现出任何加载图片,可以使用选项global:false}在

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

@downvoter,请告诉我更多 –

2

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

$.ajax({ 
    type: "POST", 
    dataType="json", 
    url:url, 
    data:{id:x}, 
    success : function(result){ 
    //stop loading message here 
    } 
0
$.ajax({ 
    type: "POST", 
    dataType : "json", 
    ... 
}).done(function(data) { 
// Stuff you want to do after ajax complete 
}); 

OR

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