【问题标题】:Why can I access a JSON object in Chrome, but not in Firefox?为什么我可以在 Chrome 中访问 JSON 对象,但不能在 Firefox 中访问?
【发布时间】:2012-11-26 16:21:47
【问题描述】:

我有以下查询字符串:

query = 'https://www.googleapis.com/fusiontables/v1/query?sql=SELECT%20Precinct%20FROM%201Kj-5ett9nIpkr2-gkof0cUGiaZm1BDVZx9zv-iQ%20WHERE%20ST_INTERSECTS(geometry,%20RECTANGLE(LATLNG(40.7549937,%20-73.98841900000002),%20LATLNG(40.7549937,%20-73.98841900000002)))&key=AIzaSyBJ1SHkB7EWWVSyDiPUA1mWZDEKt7gISDk'

通过 HTTP GET 请求返回以下对象:

{
 "kind": "fusiontables#sqlresponse",
 "columns": [
  "Precinct"
 ],
 "rows": [
  [
   "76"
  ]
 ]
}

所以我正在尝试使用 jQuery 将其获取到网络浏览器中。这在 Firefox 和 Chrome 中运行良好:

$.get(precinctQuery, function(data){console.log(data)});

但 Firefox 不喜欢这样:

$.get(precinctQuery, function(data){console.log(data.rows[0][0])});

或者这个:

$.get(precinctQuery, function(data){console.log(data.['rows'][0][0])});

两次,Firefox 都说结果是未定义的。 Chrome 返回预期结果“76”。

Chrome 是否会在后台修复此代码以使其正常工作?为什么 Firefox 不喜欢它?

【问题讨论】:

  • 当您尝试访问其索引时,您确定data 是一个数组吗?还是只是一个包含数组表示的字符串?
  • 我建议您检查一下 Firefox 中的 data 到底是什么。它可能不是你所期望的,所以你需要看看它实际上是什么。如果是我,我会在你的成功回调中设置断点并直接检查数据参数或使用console.log() 语句检查datadata.rowsdata.rows[0]
  • 您需要在收到的data 上致电$.parseJSON。或者你可以从一开始就使用$.getJSON
  • 是的,你是对的。在 Chrome 中 typeof data 返回 object。在 Firefox 中,typeof data 返回string。它看起来没有被解析。
  • 谢谢,@nhahtdh!这很好用。我想知道为什么 Chrome 会自动解析,而 Firefox 不会。

标签: jquery json firefox google-chrome


【解决方案1】:

您需要在$.get 函数上添加json 优势,如下所示:

$.get(precinctQuery, function(data)
{
    console.log(data)
}, 'json');

这将确定数据的格式,json 过滤器将为您解析 JSON,然后将其返回为 data$.getJSON 会使代码更短,但它是上述代码的捷径。

【讨论】:

    【解决方案2】:

    您忘记将 JSON 数据解析为可读对象,以下代码可以正常工作:

    query = 'https://www.googleapis.com/fusiontables/v1/query?sql=SELECT%20Precinct%20FROM%201Kj-5ett9nIpkr2-gkof0cUGiaZm1BDVZx9zv-iQ%20WHERE%20ST_INTERSECTS(geometry,%20RECTANGLE(LATLNG(40.7549937,%20-73.98841900000002),%20LATLNG(40.7549937,%20-73.98841900000002)))&key=AIzaSyBJ1SHkB7EWWVSyDiPUA1mWZDEKt7gISDk';
    $.get(query, function(data)
        {
            var obj = jQuery.parseJSON(data);
            console.log(obj.rows[0][0]);
        }
    );
    

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 2018-01-28
      • 2020-07-27
      • 2015-11-27
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2019-01-09
      相关资源
      最近更新 更多