如何在频繁调用带有ajax请求的函数时,在处理下一个请求之前等待最后一个ajax请求完成?
如何在频繁调用带有ajax请求的函数时,在处理下一个请求之前等待最后一个ajax请求完成?
我在我的代码中有一个ajax请求,如下所示:
function show_detail() { $('#product_'+index).html(' 加载中...'); $.ajax({ type: "GET", url: "someUrl", data: dataString, success: function(msg){ $('#product_'+index).html(msg); } }); }
我的要求是,在一组产品图片中点击任何一个产品图片时调用show_detail()函数,并在一个div中显示加载图片,直到产品的详细信息从ajax请求完全加载。当从ajax请求加载产品详细信息时,我必须用产品详细信息覆盖同一div。但问题是,当同时点击多个链接时,我会得到多个加载图片的相应div。
因此,我希望在连续调用相同函数(show_detail())时等待最后一个ajax请求完成,并一次只显示一个加载图片。另外,我不想用async:false冻结浏览器。
提前致谢。
问题的原因是,当频繁调用一个带有ajax请求的函数时,需要等待上一个ajax请求完成后再处理下一个请求。解决方法是使用jQuery的`when()`函数来执行回调函数,该函数可以基于一个或多个对象(通常是表示异步事件的Deferred对象)来执行回调函数。下面是一个简单的示例:
var req1 = $.ajax({...}); var req2 = $.ajax({...}); var req3 = $.ajax({...}); $.when( req1, req2, req3 ).done(function(){ console.log("all done"); });
以上代码中,我们使用`$.ajax()`函数发送了三个不同的ajax请求,并使用`when()`函数来等待这三个请求都完成后执行回调函数。
更多关于`when()`函数的信息,请查看[此链接](http://api.jquery.com/jquery.when/)。
谢谢。但是我只有一个ajax调用的代码。在连续的函数调用中,同一段代码会被执行多次。我希望执行所有的请求,但是要等待上一个请求完成后再处理下一个请求。