本问题已经有最佳答案,请猛点这里访问。
我在我的代码中有一个ajax请求,如下所示:
function show_detail()
{
$('#product_'+index).html(' loading...');
$.ajax({
type:"GET",
url:"someUrl",
data: dataString,
success: function(msg){
$('#product_'+index).html(msg);
}
});
}
我的要求是在单击一组产品图像中的任何产品图像时调用函数show_detail(),并在div中显示加载图像,直到从ajax请求中完全加载了产品详细信息为止。 当从ajax请求中加载产品详细信息时,我必须用产品详细信息覆盖同一div,但是问题是当同时单击多个链接时,我在后续的div中获得了多个加载图像。
因此,我想等待最后一个ajax请求完成,然后再调用同一函数(show_detail()),并且一次仅显示一个加载图像。 我也不想用async:false冻结浏览器
提前致谢。
您能否仅使用诸如loading之类的全局变量,在单击按钮时将其设置为true,然后在进行AJAX调用之前检查以确保其为false?
您是否看过stackoverflow.com/questions/3952387/?
谢谢。 但这会导致同时显示多个加载图像。
jQuery.when()提供了一种基于一个或多个对象(通常是表示异步事件的Deferred对象)执行回调函数的方法。 它使语法简洁明了,并避免涉及任何全局变量(例如ajaxStart和ajaxStop),这些全局变量在页面开发时可能会产生有害的副作用。以下显示了一个简单的示例。请尝试阅读有关它的更多内容... :)
var req1 = $.ajax({...});
var req2 = $.ajax({...});
var req3 = $.ajax({...});
$.when( req1, req2, req3 ).done(function(){
console.log("all done")
});
FYI
jQuery.when()
谢谢。但是我只为ajax调用提供了一个代码。 相同的代码正在执行背对背函数调用。我想执行所有请求,但一个接一个。