0

我正在使用 jquery 的每个函数循环参数。我还将所有从“get”方法获取的数据推送到数组。一旦我的数组准备好了,我需要调用一个主干函数..

我这样做:

var temps = [];

        $.each(views,function(i,view){
            $.get("js/temp/" + view + ".html", function(data){
                    temps.push(data);
                    console.log(temps); //results correctly.
            })
        })

        $.when.apply(null,temps).done(function(){
            console.log(temps); //results as undefined
        });

但我得到的结果是'未定义'..这里有什么问题..有人能帮我弄清楚吗?

使用我所做的答案添加更多问题..

$.each(views,function(i,view){
        var d = $.Deferred();
        requests.push(d.promise());
        $.get("js/temp/" + view + ".html", function(data){
                view.prototype.template = _.template(data);//not working when i use the string parameter..
                appView.prototype.template = _.template(data); //it works
                temps.push(data);
                d.resolve();
        })
    })

如何将字符串参数转换为返回函数..?

4

2 回答 2

4

您需要另一组延迟对象来处理此问题:

    var temps = [];
    var requests = [];

    $.each(views,function(i,view){
        var d = $.Deferred();
        requests.push(d.promise());
        $.get("js/temp/" + view + ".html", function(data){
                temps.push(data);
                console.log(temps); //results correctly.

                d.resolve();
        })
    })

    $.when.apply(null,requests).done(function(){
        console.log(temps); //results as undefined
    });

使用 ajax 延迟:

    var requests = [];

    $.each(views,function(i,view){
        var d = $.get("js/temp/" + view + ".html");
        requests.push(d);
    })

    $.when.apply(null,requests).done(function(){
        console.log(arguments); //results as undefined
    });
于 2013-05-17T15:09:41.597 回答
0

您仅在请求完成temps填充数组。

当您调用$.when()时,数组仍然是空的。

相反,您需要创建一组未完成的 AJAX 请求的承诺:

var temps = views.map(function() { 
    return $.get("js/temp/" + view + ".html"); 
});
于 2013-05-17T15:03:09.603 回答