我有一个调用分页 API 的函数,循环访问每个页面并从每个响应返回数据:
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
nextPage(data.next);
$.each(data.results, function (k, v) {
console.log(v.city_name);
});
});
}
nextPage('http://url.com/api/v1/cities/?page=1');
目前,当我将响应记录到控制台时,我得到如下所示的内容:
Paris
Brussels
Mexico City
...
但我想要的是一个看起来像这样的结构:
[
{item: 'Paris'},
{item: 'Brussels'},
{item: 'Mexico City'}
]
作为引用,响应数据如下所示:
{
"count": 105,
"next": "http://url.com/api/v1/cities/?page=2",
"previous": null,
"results": [
{
"city_detail": "http://url.com/api/v1/cities/1/",
"city_name": "Paris"
},
{
"city_detail": "http://url.com/api/v1/cities/2/",
"city_name": "Brussels"
},
{
"city_detail": "http://url.com/api/v1/cities/3/",
"city_name": "Mexico City"
}
]
}
我知道答案就在我面前,而且可能很简单,但我缺乏 JavaScript 知识让我失望。希望能帮助解决这个问题。谢谢!
编辑
问题似乎是 nextPage 函数进行了多次调用,从 JSON 的每个页面返回数据。我可以将这些数据放入多个对象中,但不能用一个对象来代表所有响应。
最佳答案
所以基本上你想将键:值对存储到一个对象中......:
点符号:
var cities = {}
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
nextPage(data.next);
$.each(data.results, function (k, v) {
console.log(v.city_name);
cities.name = v.city_name //Push to an object
});
});
}
所以你会得到这样的回复:
cities = [
{city: 'Paris'},
{city: 'Brussels'},
{city: 'Mexico City'}
]
括号表示法:
var cities = {}
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
nextPage(data.next);
$.each(data.results, function (k, v) {
console.log(v.city_name);
cities["name"]= v.city_name //Push to an object
});
});
}
结果
: (两者相同)
cities = [
{city: 'Paris'},
{city: 'Brussels'},
{city: 'Mexico City'}
]
编辑
好吧,还有另一个问题!虽然很狡猾,但我们最终还是捕获了它。所以问题就出在这里:
$.getJSON(url, function(data) {
console.log(data.results)
nextPage(data.next);
$.each(data, function (k, v) {
cities["title"]= v.title //Push to an object
});
});
现在,你看到它说 data.results ...实际上 data.results 是一个空的 undefined variable 。你应该做的只是包含整个数据的 data 。您现在可能不明白,但请查看下面我表示的代码...
var dataJSON;
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
console.log(data) //This consits the data on the below provided url...
dataJSON = data; // Just making a public variable assigned to the data..
nextPage(data.next);
$.each(data, function (k, v) {
});
});
}
nextPage('https://cdn.rawgit.com/amanuel2/Collabs/master/list.json')
Plunker
进入控制台查看数据....
编辑2
好吧,这几乎就是我放在 GITHUB 中的 JSON 文件,所以我有一个安全的 HTTPS://.. 无论如何,我在这里刚刚做了 data.results,我得到了这个结果:
这是 Plunker
!希望这有帮助!!
编辑3
好吧,现在这是最后一点了.. 对于你的第二个 JSON 页面.. 你的第二个 JSON 页面实际上有语法错误.. 所以我修复了这些错误,将其放入 github 并上传了新的 JSON.. 这是 plunker
..
<强> Link to Read More
关于对象..
关于javascript - 从多个 getJSON 响应返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167181/