2016-08-16 27 views
0

私は、JSONデータの応答であるgeonamesのAPIを取得しようとしています。 私はdataStorageオブジェクトを作成し、その中にレスポンスを入れます。 現在、格納オブジェクトから値を取得するときに問題があります。ここでオブジェクトへのjsonレスポンスを格納するので、オブジェクトから値を取得することができます

が私のコードです:

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" 
     } 
    ] 
} 
+0

JSONスニペットを提供できますか?今すぐアクセスできない、まずそれを見てみたい。 – Dandy

+0

あなたは間違った方法で 'datastorage'を初期化しています..期待されるJSON –

+0

@mplungjanのサンプルを提供すると助けになるかもしれません。おそらくdatastorageはどこかグローバルで、彼は' geoCode'というキーでレスポンスを追加したいでしょう。それで彼はおそらく彼がそれを使用しているINを使用することができます。..非常に明確ではありません.. –

答えて

0

はこれを試してください:あなたは成功関数内dataStorageから値を取得する必要があります国コードを入力すると、クエリはさらに機能しません。JSONを繰り返し処理し、値を確認する必要があります。inはキーをチェックするだけです..

+0

お返事ありがとうございます。私は "dataStorage [" AN "]。geonames [0] .countryName" – Jotzuc

+0

を使用してデータを取得することができます。 –

-2

あなたの主な問題は、AJAXリクエストが非同期であるということです。これは、要求がJSON値を返す前に、関数CountryQueryがすぐに戻ることを意味します。

dataStorage.push(geoCode,data); 
代わりの

dataStorage[geoCode] = data; 

、あなたは 'AN' を探しているかのように

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(); 
+0

なぜdownvote? – mplungjan

関連する問題