我试图让ajax推迟,只有在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({
上达到中断,这很好。这是but,所以它会点击.done()
,然后它会达到我在$.merge()
success:function(data){}
设置的断点
关于如何通过这个的任何想法?到目前为止,SO上的任何内容都没有帮助,而且我还在墙上。
答案 0 :(得分:0)
制作
行queries.push(run_query(term,provider));
有意义,run_query
应该返回一个承诺。
应该返回的promise是$.ajax()
返回的对象,即
return $.ajax({
...
});
您可能还想从else{...}
子句返回承诺。