jquery $ get ajax调用并不总是等待响应

时间:2014-08-28 10:05:20

标签: jquery ajax

我有一个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);
    });
});

它有时会起作用,有时却不起作用,我认为这是因为我没有告诉它要等到成功?是对的吗?有人可以建议如何写电话吗?

--- --- EDIT

谢谢大家。在做了一些研究之后我重新编写了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);
        }
    });     
});

感谢

2 个答案:

答案 0 :(得分: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
});

答案 1 :(得分: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);
  });
});