我有一个调用分页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的每个页面返回数据。我可以将这些数据转换为多个对象,但不能将一个对象表示为所有响应。
答案 0 :(得分:2)
所以基本上你想把key:value对存储到一个对象..:
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是一个空的未定义变量。你应该做的只是包含整个数据的数据。您可能现在不理解它,但查看下面代表的代码......
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
转到控制台查看数据....
<强> EDIT2 强>
好的,这比你放入GITHUB的JSON文件好多了,所以我有一个安全的HTTPS:// .. Anways here我刚刚做了data.results,我得到了这个结果:
这是 Plunker
!希望这有帮助!!
好了,现在这是最后一点..你的第二个JSON页面..你的第二个JSON页面实际上有语法错误..所以我修复了那些把它放在github并上传了新的JSON ..这里是{{3 }} ..
plunker
关于对象..
答案 1 :(得分:0)
var results = []
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
nextPage(data.next);
$.each(data.results, function (k, v) {
results.push({item: v.city_name})
console.log(v.city_name);
});
});
}
console.log(results)
// should show an array with {item: city_name} objects.
这允许在外部作用域中访问results
数组。