簡體   English   中英

將json響應存儲到對象,以便可以從對象獲取值

[英]Store json response to object so can get the value from the object

我正在嘗試獲取將響應JSON數據的地名API。 我創建一個dataStorage對象,並將響應放入其中。 目前,從存儲對象獲取值時出現問題。

這是我的代碼:

var dataStorage = new Object();

function CountryQuery(geoId, geoCode) {
  $.ajax({
    type: "GET",
    url: "http://api.geonames.org/childrenJSON?geonameId=" + geoId + "&username=tompi",
    dataType: "json",
    success: function(data) {
      dataStorage[geoCode] = data;
    }
  });
}

if (!('AN' in dataStorage)) {
  CountryQuery(6255152, "AN");
}

$(dataStorage).find('AN').geonames.countryName;

JSON響應如下所示:

{  
   "totalResultsCount":2,
   "geonames":[  
      {  
         "countryId":"6697173",
         "countryCode":"AQ",
         "name":"Antarctica",
         "countryName":"Antarctica"
      },
      {  
         "countryId":"3371123",
         "countryCode":"BV",
         "name":"Bouvet Island",
         "countryName":"Bouvet Island"
      }
   ]
}

嘗試這個 :

dataStorage.push(geoCode,data);

代替:

dataStorage[geoCode] = data;

如果你正在尋找“一”作為國家代碼,那么你的查詢將進一步不會work..You將迭代通過JSON並檢查值.. in只檢查鍵..

您的主要問題是ajax請求是異步的 這意味着函數CountryQuery在請求返回JSON值之前立即返回。 您必須從成功函數內的dataStorage獲取值:

var dataStorage = {};

function countryQuery(geoId, geoCode, callback) {
    $.ajax({
        type: 'GET',
        url: 'http://api.geonames.org/childrenJSON?geonameId=' + geoId + '&username=tompi',
        dataType: 'json',
        success: function(data) {
            dataStorage[geoCode] = data;
            callback();
        }
    });
}

function useDataStorage() {
  alert(dataStorage.AN.geonames[0].countryName);
}

if (dataStorage.AN === undefined) countryQuery('6255152', 'AN', useDataStorage);
else useDataStorage();

暫無
暫無

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

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