我試圖讓AJAX推遲只有當阿賈克斯的名單已經完成返回與。這是我所有的東西(注意這不是真正的劇本,因爲那裏有很多東西,這只是我不能以我可以放在SO上的形式工作的部分)AJAX不被推遲時
function start_search(){
var self=this;//hold to preserve scop
var wsu_search = self._get_globals('wsu_search').refresh();
var search_input = self._get_globals('search_input').refresh();
var term = wsu_search.find('input').val();
var queries = Array();
self.search_options.data=[];
$.each(self.search_options.providers, function(i,provider){
$.ui.autocomplete.prototype.options.termTemplate = (typeof(provider.termTemplate) !== undefined && provider.termTemplate !== "") ? provider.termTemplate : undefined;
queries.push(run_query(term,provider));
});
//$.whenAll(queries)
var defer=$.when.apply($, queries).done(
function(){
return self.search_options.data;
});
}
function run_query(term,provider){
var self=this;//hold to preserve scop
var search_input = self._get_globals('search_input').refresh();
var result = [];
if(typeof(provider)!==undefined && typeof(provider.url)!==undefined && provider.nodes===undefined){
$.ajax({
url: provider.url,
dataType: provider.dataType,
data: {
related:self.search_options.search.getRelated
},
success:function(data){
var proData=self.setup_result_obj(term,data);
$.merge(self.search_options.data,proData);
}
});
}else{
//self.search_options.data.push(result);
}
}
start_search();
會發生什麼情況是,.done()
部分總是success
命中前命中。當我對這個有破發點,我可以看到,每個run_query()
的的被添加到var queries = Array();
和.done()
之前發生。添加完之後,它會在$.ajax({
上突破,這很好。這是但是,所以它擊中.done()
然後它擊中了我設置的$.merge()
下的success:function(data){}
任何想法如何通過此?到目前爲止,SO上沒有任何幫助,而且我在牆上。
在首位:你爲什麼結合deferreds和'success'? – zerkms
你是什麼意思爲什麼我使用它們兩個? –
沒錯.............. – zerkms