我正在尝试使用ajax请求构建一个JSON对象,然后打印出所有美化的数据,以便于阅读。
这就是我所拥有的:
var url, data;
var shows = ["stranger things", "the night of"];
var json = {};
$.each(shows, function(i, show) {
url = 'https://www.omdbapi.com/?t=' + show + '&type=series&plot=short'
$.ajax(url, {
complete: function(obj, status){
data = $.parseJSON(obj.responseText);
json.push(obj.responseText);
console.log(data);
}
});
});
var jsonPretty = JSON.stringify({shows: json}, null, '\t');
$("pre").text(jsonPretty);
https://jsfiddle.net/we1p7cqj/1/
问题出在json.push(obj.responseText)
附近,但我无法找到解决办法。
有什么想法吗?
答案 0 :(得分:1)
你无法推入物体;你可以推进阵列。
var json = [];
您的.text(jsonPretty)
即将推出。将其移至complete
处理程序。
答案 1 :(得分:1)
首先,您的对象初始化错误:
应为var json = [];
此外,由于ajax请求默认是异步的,因此以下代码同时执行,此时json
的值为空对象
var jsonPretty = JSON.stringify({shows: json}, null, '\t');
$("pre").text(jsonPretty);
因此,您可以在执行该代码之前使ajax请求同步或检查上一个节目:
if(showsLength == i + 1){
var jsonPretty = JSON.stringify({shows: json}, null, '\t');
$("pre").text(jsonPretty);
}
演示:https://jsfiddle.net/we1p7cqj/4/
这是另一种方法(同步请求)
$.ajax(url, {
async: false,
complete: function(obj, status){
data = $.parseJSON(obj.responseText);
json.push(obj.responseText);
console.log(data);
}
});
演示:https://jsfiddle.net/we1p7cqj/5/
啊,我现在明白了。谢谢你的帮助,山姆!有办法吗? 删除斜杠\“? - Jon 10分钟前
你看到这些被削减的原因是因为你要字符串化字符串而不是对象,所以要解决这个问题,你需要在推送时将它变为json对象
data = $.parseJSON(obj.responseText);
json.push(data);