【问题标题】:How to stop code until Ajax requests are done?如何在 Ajax 请求完成之前停止代码?
【发布时间】:2015-05-30 19:11:43
【问题描述】:

我这里有个大问题。在继续我的其余代码之前,我需要等待我的 ajax 请求。我搜索了 2 天,发现了一个可能可行的解决方案。我已经尝试了很多方法来解决我的问题,现在我需要帮助。 .when().done() 方法只是在另一个函数完成时执行一个函数,并且不会停止我的代码的执行。我不想使用 $.ajax {async:false}。我试过了,不推荐,也不行。

所以首先我执行 calculerTauxUtilisation() 方法,该方法调用了 lancerRequeteObtenirTaux() 几次,我想在执行 placerTauxUtilisation() 之前等待 traiterRequeteObtenirTaux()。我的问题是 lancerRequeteObtenirTaux 执行了好几次而不执行 traiterRequeteObtenirTaux() 和 placerTauxUtilisation()

感谢您的帮助!

埃米尔

var elementHoublon = null;

function calculerTauxUtilisation()
{

    var lignesHoublons = $('[id = "elementHoublon"]');
    lignesHoublons.each(function (index, item) {
    elementHoublon = $(item);
    $.when(lancerRequeteObtenirTaux(elementHoublon.children().eq(0).children().eq(0))).done(function (taux) { placerTauxUtilisation (taux) });
    });

}

function lancerRequeteObtenirTaux(item)
{
    return $.ajax({
        url: "/Recettes/tauxUtilisation/",
        data: "url=" +     "http://sv54.cmaisonneuve.qc.ca/brewmaster/houblons/tauxutilisation?" + "og=" +     $("#OGReel").val().replace(",", ".") + ",duree=" +     item.parent().next().next().next().next().children().eq(0).val(),
        success: traiterRequeteObtenirTaux
      })
}


function traiterRequeteObtenirTaux(taux)
{
    triggerA = triggerA + 1;
    var tauxUtilisation = taux;
}

function placerTauxUtilisation(taux)
{
    elementHoublon.children().eq(5).children().eq().val(taux);
}

【问题讨论】:

  • 如果您需要等待ajax调用,只需在同步模式下调用即可
  • 当我执行 $.ajax{async:false} 时,我的 JQuery.2.1.3.js 中有类似的错误(不在我的代码中),所以它不起作用,不推荐
  • 你有什么错误?
  • 还有为什么你使用全局 elementHoublon 变量而不是本地变量?
  • 我正在尝试重新创建我的错误,但没有任何反应。我应该做这样的事情吗? lancerRequeteObtenirTaux() {$.ajax {async:false...我的代码的其余部分}}

标签: jquery ajax asynchronous


【解决方案1】:

一种可能适合您的简单(未经测试)方法:

function lancerRequeteObtenirTaux(item)
{
    return $.ajax({
        …
        success: function(taux){
            traiterRequeteObtenirTaux(taux);
            placerTauxUtilisation(taux);
        }
    })
}

【讨论】:

    最近更新 更多