2017-02-28 57 views
0

我完全不了解JavaScript,试图从geocoding.geo.census.gov获取JSONP地理编码数据到网站中。答案看起来像这样(从铬),只显示前几个键:无法解析来自地理编码网站的jsonp响应

JSONPCallback({“result”:{“input”:{“address”:{“address”:“333 e 33th st “vintage”:{“isDefault”:true,“vintageName”:“Current_Current”,“id”:“4”,“vintageDescription”:“当前年份 - 当前基准”}, “isDefault”:false,“id”:“4”,“benchmarkName”:“Public_AR_Current”,“benchmarkDescription”:“公共地址范围 - 当前基准”}} .............. 。

这是我使用的代码:

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返回:Uncaught TypeError:无法读取未定义的属性'children' – MariusD

+0

刚刚尝试了一些不同的代码,它的工作原理。我直到现在才意识到该网站正在返回对象内的对象.. – MariusD

0

我相信旧代码不工作,因为它试图解析一个对象。如果我错了,请纠正我。