由于某些原因,这并没有将我的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;
};
控制台日志返回的确切响应不是单个数组项。
答案 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'}]