我有一个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);
}
});
});
感谢
答案 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);
});
});