2017-02-28 12 views
0

JSONPジオコーディング・データをgeocoding.geo.census.govからWebサイトに取得しようとすると、JavaScriptが新しくなりました。応答は次のようなものです(クロムから):最初のいくつかのキーが表示されます:ジオコード・サイトからjsonpレスポンスを解析できません

JSONPCallback({"result":{"input":{"address":{"address": "333 e 33th st現在のヴィンテージ - 現在のベンチマーク "}、"ベンチマーク ":{" isDefault ":true、" vintageName ":" Current_Current "、" id ":" 4 "、" vintageDescription " "isDefault":false、 "id": "4"、 "benchmarkName": "Public_AR_Current"、 "benchmarkDescription": "Public Address Ranges - 現在のベンチマーク"}} .............. 。

これは私が使用しているコードです:

var jsonp = { 
callbackCounter: 0, 

fetch: function(url, callback) { 
    var fn = 'JSONPCallback_' + this.callbackCounter++; 
    window[fn] = this.evalJSONP(callback); 
    url = url.replace('=JSONPCallback', '=' + fn); 

    var scriptTag = document.createElement('SCRIPT'); 
    scriptTag.src = url; 
    document.getElementsByTagName('HEAD')[0].appendChild(scriptTag); 
}, 

evalJSONP: function(callback) { 
    return function(data) { 
     var validJSON = false; 
    if (typeof data == "string") { 
     try {validJSON = JSON.parse(data);} catch (e) { 
      /*invalid JSON*/} 
    } else { 
     validJSON = JSON.parse(JSON.stringify(data)); 
     window.console && console.warn('response data was not a JSON string'); 
    } 

     if (validJSON) { 
      callback(validJSON); 
     } else { 
      throw("JSONP call returned invalid or empty JSON"); 
     } 
    } 
} 

}

はその後:

{console.log(Object.keys(data));} //(or data[0]) 

と私はコンソールに取得していますすべてがある:

応答データはJSON文字列ではありませんでした

アレイ[1] 0: "結果" の長さ: 1 proto:Array [0]

なぜ私が得ているのは「結果」だけなのでしょうか?

+0

JSON.parseでデータを解析する必要はありません。 – Joe

答えて

0
evalJSONP: function(callback) { 
    return callback;    
} 

これでうまくいくはずです。あなたのサンプルが正確ならば。その後、データを解析する必要はありません。

+0

私はまだ「結果」しか得ていません。 – MariusD

+0

これは私が見つけたコードで、他のAPI(私によって書かれたものではありません)でテストされました。元の例は次のとおりです。jsonp.fetch(surl、function(data){console.log(data.data.children [0] .data.title)});私の代わりに:jsonp.fetch(surl、function(data){console.log(Object.keys(data)[0]);}); data.data.children [0] .data.title.input returns:Uncaught TypeError:未定義のプロパティ 'children'を読み取れません – MariusD

+0

ちょうど異なるコードを試してみました。私は今までサイトがオブジェクト内のオブジェクトを返すまでは気付かなかった。 – MariusD

0

オブジェクトを解析しようとしていたため、古いコードが機能していなかったと思います。もし私が間違っていれば私を修正してください。

関連する問題