2015-05-30 260 views
0

我在這裏有一個大問題。我需要等待我的ajax請求,然後繼續我的其他代碼。我在2天內進行了搜索,發現了一個可能可行的解決方案。我嘗試了很多方法來解決我的問題,現在我需要幫助。 .when()。done()方法只是在另一個函數完成時執行一個函數,並且不會停止執行我的代碼。我不想使用$ .ajax {async:false}。我試了一下,不推薦它,它不工作。如何在Ajax請求完成之前停止代碼?

因此,首先執行calculerTauxUtilisation()方法,他多次調用lancerRequeteObtenirTaux(),我希望在此之前等待traiterRequeteObtenirTaux()執行placerTauxUtilisation()。我的問題是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); 
} 
+0

如果你需要等待Ajax調用,只是把它在同步模式 – Grundy

+0

當我做$。 ajax {async:false},我在我的JQuery.2.1.3.js類似的錯誤(不在我的代碼中),所以它不工作,不建議 –

+1

你有什麼錯誤? – Grundy

回答

0

一個簡單的(&未經測試)方法可能會爲你工作:

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

我是否需要刪除我的.when和.done或不? –