ajax不被推迟

时间:2014-02-24 23:54:51

标签: jquery ajax jquery-deferred

我试图让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上的任何内容都没有帮助,而且我还在墙上。

1 个答案:

答案 0 :(得分:0)

制作

queries.push(run_query(term,provider));

有意义,run_query应该返回一个承诺。

应该返回的promise是$.ajax()返回的对象,即

return $.ajax({
    ...
});

您可能还想从else{...}子句返回承诺。