2014-08-28 22 views
0

我有一個jquery ajax調用如下...

$(".eetag").each(function(){ 
    var currentItem = $(this); 
    var desc = $(this).attr('data-desc'); 
    $.get('service/transactionCategoryByKeyword.json',{'phrase': desc}, function(data){ 
     //alert(":" + desc + ":" + data.tranCategoryCode); 
     $(currentItem).tagsinput('add', data); 
    }); 
}); 

有時候工作,有時不,我認爲這是因爲我還沒有告訴它要等到成功?是對的嗎?有人可以建議如何寫電話嗎?

---編輯---

謝謝大家。我在做了一些研究之後重新編寫了ajax調用,它好得多,但我仍然有時看到ajax沒有等待。特別是它只發生(即不會等待)我頁面上的第一個eetag。我是否正確地重寫了它?

$(".eetag").each(function(){ 
    var currentItem = $(this); 
    var desc = $(this).attr('data-desc'); 
    $.ajax({ 
     url: 'service/transactionCategoryByKeyword.json',   
     type: 'GET', 
     async: false, 
     contentType: 'application/json', 
     data: {'phrase': desc},  
     success: function(data) { 
      $(currentItem).tagsinput('add', data); 
     } 
    });  
}); 

感謝

+3

它不會。因爲它是一個異步函數 – 2014-08-28 10:06:32

+1

您需要使用'$ .ajax()'函數,並在執行其餘代碼之前將aynsc選項設置爲false。 – Jhecht 2014-08-28 10:09:15

+0

我已經根據您的意見去修復它,現在它幾乎一直都在工作,但我偶爾會注意到它似乎還沒有等待。我有缺少的東西嗎? – Richie 2014-08-28 10:29:26

回答

1

你可以遞歸遍歷.eetags。這樣eetags會被一個接一個地處理。

function recursiveAjaxCall(elements, index, callback) { 
    if(index < elements.length) { 
     var currentItem = elements[index]; 
     var desc = $(currentItem).attr('data-desc'); 
     $.ajax({ 
      dataType: 'json', 
      type: 'GET', 
      url: 'service/transactionCategoryByKeyword.json', 
      data: {'phrase': desc}, 
      success: function(data) { 
       $(currentItem).tagsinput('add', data); 
       recursiveAjaxCall(elements, index+1, callback); 
      }, 
      error: function(error) { 
       recursiveAjaxCall(elements, index+1, callback); 
      } 
     }) 
    } 
    else { 
     callback(); 
    } 
} 


var elements = $(".eetag"); 
recursiveAjaxCall(elements, 0, function() { 
    //done 
}); 
+0

嗨,感謝您的幫助,就在您發佈您的答案之前,我嘗試了類似的方式,但沒有遞歸(請參閱我的編輯),爲什麼您建議我們需要遞歸調用? – Richie 2014-08-28 10:28:32

+0

這通常是我解決這個問題的方法。我不知道jQuery.ajax()有一個異步選項。你的解決方案更直接,所以我會堅持下去。 – matteok 2014-08-28 10:51:26

+0

好的謝謝你 – Richie 2014-08-28 10:53:54

1

嘗試使用when()

$(".eetag").each(function(){ 
    var currentItem = $(this); 
    var desc = $(this).attr('data-desc'); 
    $.when($.get('service/transactionCategoryByKeyword.json',{'phrase': desc})).then(function(data, textStatus, jqXHR){ 
    //alert(":" + desc + ":" + data.tranCategoryCode); 
    $(currentItem).tagsinput('add', data); 
    }); 
});