【问题标题】:Unable to parse jsonp response from geocode site无法解析来自地理编码站点的 jsonp 响应
【发布时间】: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


【解决方案1】:
evalJSONP: function(callback) {
    return callback;            
}

应该可以。如果你的样本是准确的。那么你就不需要解析数据了。

【讨论】:

  • 我仍然只得到“结果”。
  • 这是我找到的代码,它用其他 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: Cannot read property 'children' of undefined
  • 刚刚尝试了一些不同的代码,它可以工作。直到现在我才意识到该网站正在返回对象中的对象..
【解决方案2】:

我认为旧代码无法正常工作,因为它试图解析一个对象。如果我错了,请纠正我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多