将ajax对象响应推送到数组中

时间:2014-01-03 17:15:58

标签: javascript jquery ajax arrays

由于某些原因,这并没有将我的Ajax响应中的每个对象正确地循环到数组中,现在我正用这个敲打我的头。

我的Ajax响应如下......

{type:'blog_post',date:2013-30-12,title:'Blog Post',width:450,content:'qweqwe'},{type:'blog_post',date:2013-30-12,title:'Blog Post',width:450,content:'qweqwe'}

这是代码......

var getTimelineData = function() {
    var tldata = [];
    $.get('/data/timeline_data', function(data) {
        $.each(data, function(i, val) {
            tldata.push(val)
            console.log(val);
        });
    });
    return tldata;
};  

控制台日志返回的确切响应不是单个数组项。

3 个答案:

答案 0 :(得分:2)

AJAX是异步!当您调用$.get时,AJAX调用将在后台运行,您的代码将继续运行。将来稍后,当AJAX调用完成后,您的回调函数就会运行。因此,return tldata;在AJAX调用完成之前运行。

无法从AJAX调用返回一个值,这不是它的工作原理。我建议将回调传递给getTimelineData函数。您可以在完成AJAX调用时调用它:

var getTimelineData = function(callback) {
    $.get('/data/timeline_data', function(data) {
        var tldata = [];

        $.each(data, function(i, val) {
            tldata.push(val)
            console.log(val);
        });

        if($.isFunction(callback)){
            callback(tldata);
        }
    });
};

然后你可以这样称呼它:

getTimelineData(function(data){
    console.log(data);
});

答案 1 :(得分:1)

也许在线提供的JSON cheker之一可以帮到你。我经常使用http://jsonlint.com/

在JSON中,数组是用[]声明的,所以我怀疑ajax的答案应该更多:

[
    {
        "type": "blog_post",
        "date": "2013-30-12",
        "title": "BlogPost",
        "width": 450,
        "content": "qweqwe"
    },
    {
        "type": "blog_post",
        "date": "2013-30-12",
        "title": "BlogPost",
        "width": 450,
        "content": "qweqwe"
    }
]

答案 2 :(得分:1)

您的ajax响应无效JSON。如果要返回数组,则应将其包装在[]中:

[{type:'blog_post',date:2013-30-12,title:'Blog Post',width:450,content:'qweqwe'},{type:'blog_post',date:2013-30-12,title:'Blog Post',width:450,content:'qweqwe'}]