何时和应用函数(jquery)不能正常工作

时间:2013-05-17 15:00:05

标签: jquery

我使用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();
        })
    })

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

2 个答案:

答案 0 :(得分:3)

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

    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 deferreds:

    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
    });

答案 1 :(得分:0)

在请求完成后,您只填充temps数组

当您致电$.when()时,数组仍为空。

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

var temps = views.map(function() { 
    return $.get("js/temp/" + view + ".html"); 
});