Ajax调用(默认情况下)是 异步的 。这意味着该代码:
$("#li_"+I).toggleClass("off on");element.toggleClass("off on");return false;可以在其前面的ajax调用完成之前执行。对于刚接触Ajax和异步代码执行的程序员来说,这是一个普遍的问题。在ajax调用完成后,您要执行的所有操作都必须放入
回调中 ,例如您的
success处理程序:
$.ajax({ type: "POST", url: "_js/changetag.php", data: info, success: function(){ $("#li_"+I).toggleClass("off on"); element.toggleClass("off on"); }});同样,您也可以在其中放置第二个ajax调用:
$.ajax({ type: "POST", url: "_js/changetag.php", data: info, success: function(){ $("#li_"+I).toggleClass("off on"); element.toggleClass("off on"); $.ajax({ url: "_js/loaddeals_v2.php", success: function(results){ $('#listresults').empty(); $('#listresults').append(results); } }); }});使用jQuery 1.5的Deferred Object,您可以使它更加流畅。
function firstAjax() { return $.ajax({ type: "POST", url: "_js/changetag.php", data: info, success: function(){ $("#li_"+I).toggleClass("off on"); element.toggleClass("off on"); } });}// you can simplify this second call and just use $.get()function secondAjax() { return $.get("_js/loaddata.php", function(results){ $('#listresults').html(results); });}// do the actual ajax callsfirstAjax().success(secondAjax);这很不错,因为它可以使您取消嵌套回调-您可以编写异步执行的代码,但编写的方式类似于同步执行的代码。



