簡體   English   中英

從多個 getJSON 響應返回對象

[英]Return object from multiple getJSON responses

我有一個函數調用分頁 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 是一個空的未定義變量.. 你應該做的只是包含整個數據的數據。 您現在可能不明白,但請查看我在下面表示的代碼...

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://.. Anways 在這里,我只是做了 data.results,我得到了這個結果:

在此處輸入圖片說明

這是Plunker 希望這有幫助!!

編輯3

好的,現在這是最后一點.. 使用你的第二個 JSON 頁面.. 你的第二個 JSON 頁面實際上有語法錯誤.. 所以我修復了那些把它放在 github 中並上傳了新的 JSON .. 這是plunker ..

Link to Read More關於對象..

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數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM