私はページ付けされたAPIを呼び出す関数を持っています。最初のページへの最初の呼び出しを行い、応答で返されたnext
URLを使用して、後続のページへのリクエストを続けます。 next
がnull
になるまでこれを行います。私は、応答からデータ(都市名)を抽出し、これらをグローバル配列にプッシュしようとしています。複数のAPIリクエストからグローバル配列にプッシュ
私のコードは、現在、次のようになります。
ページ1
{
"count": 105,
"next": "http://url.com/api/v1/cities/?page=2",
"previous": null,
"results": [
{
"city_name": "Paris"
},
{
"city_name": "Brussels"
}
]
}
2ページ
:私はこのようになりJSONの2つのページを持っていると仮定するとvar results = [];
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
nextPage(data.next);
$.each(data.results, function (k, v) {
results.push(v.city_name);
});
});
}
nextPage('http://url.com/api/v1/cities/?page=1');
console.log(results);
{
"count": 105,
"next": null,
"previous": "http://url.com/api/v1/cities/?page=1",
"results": [
{
"city_name": "Manchester"
},
{
"city_name": "Curitiba"
}
]
}
私は配列はこのように見えるように期待する:私はコンソールにresults
をログインしたときに、配列が空である、しかし
["Paris", "Brussels", "Manchester", "Curitiba"]
。誰も助けることができますか?これ以上の情報が必要な場合はお知らせください。歓声
見える。 nextPage()への2回目の呼び出しの直前にconsole.log()のデータを試してください。おそらく応答は期待通りではありません。 –
nextPage is asynchronous - console.logは、データを取得してグローバル結果配列に格納する前に呼び出されています。 – thewatcheruatu
javascript呼び出しが終了する前に 'results'配列データにアクセスしようとしています。あなたの 'console.log()'を '$ .each()'の中に入れてみてください。 'results'配列にデータが正しく入力されていることがわかります。 –