0

次のクエリ文字列があります。

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'

これにより、HTTPGETリクエストで次のオブジェクトが返されます。

{
 "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が気に入らないのはなぜですか?

4

2 に答える 2

2

次のように、関数にjson上位を追加する必要があります。$.get

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

これによりデータの形式が決まり、jsonfilterはJSONを解析してから、として返しますdata$.getJSONコードは短くなりますが、上記のコードのショートカットです。

于 2012-11-26T16:33:02.723 に答える
1

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]);
    }
);
于 2012-11-26T16:28:56.987 に答える