【发布时间】:2017-03-01 23:15:33
【问题描述】:
我对 JavaScript 完全陌生,试图从 geocoding.geo.census.gov 获取 JSONP 地理编码数据到一个网站。响应看起来像这样(来自 chrome),只显示前几个键:
JSONPCallback({"result":{"input":{"address":{"address":"333 e 33th st austin tx"},"vintage":{"isDefault":true,"vintageName": "Current_Current","id":"4","vintageDescription":"Current Vintage - Current Benchmark"},"benchmark":{"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 原型:数组[0]
我不明白为什么我得到的只是“结果”?
【问题讨论】:
-
你不需要用 JSON.parse 解析数据。
标签: javascript jsonp