3

緯度と経度を使用して都市名を取得しようとしています。

Google ジオコーディングはこのオプションをサポートしており、「リバース ジオコーディング」と呼ばれています。そして、サンプルに書かれているように、私はこのリンクへの取得要求を行う必要があります:

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false

それはjsonで配列を返します。試すことができます。

このjsonをjqueryで解析するにはどうすればよいですか?

私はこれを次のようにしようとしています:

   $.ajax({
      url: 'http://maps.googleapis.com/maps/api/geocode/json',
      type: 'get',
      data: {
        'latlng':lat+","+longit,
        'sensor': false
      },
      dataType: 'jsonp',
      success: function(result){

        console.log(results)

      },
      error: function(xhr,ajaxOptions,thrownError){
        console.log(xhr.status);
        console.log(ajaxOptions);
        console.log(thrownError);
      }

  })

この配列を取得しましたが、解析できません。それは言います:

キャッチされない SyntaxError: 予期しないトークン:

どうすればこれを修正できますか?

4

4 に答える 4

2

簡潔な答え; できません: JSONP はここではサポートされていません (または、少なくとも実際にはサポートされているとは文書化されていません) 。代わりにGeocoderクラスを使用してください。

Google Geocoding API は次のように述べています。

このサービスを JavaScript アプリケーションで使用したいとお考えですか? Google Maps API v3 の Geocoder クラスを確認してください。

Google はプレーンな JSON のみを提供しているようですが、同じ生成元ポリシーのために自分のページで解析することはできませんが、たとえば. その制限がない別のサーバーで実行されているphpアプリ。したがって、これをWebページで使用したい場合は、Geocoderクラスを使用するのが最善の方法です-とにかく、解析の作業を行います.

--

dataType="jsonp" を使用すると、jQuery は SCRIPT 要素を作成し、src 属性をクエリ文字列に設定して、結果をロードしようとします。その後、ブラウザーは返された json を取得し、自己完結型の JavaScript ファイルであるかのように解析しようとします。これが失敗の原因です。

問題は、JSON が有効なプレーン スタンドアロン JavaScript ではないことです。たとえば、返された JSON 文字列は次のようになります。

{ "results" : [ { "address_components" : [

... 解析に失敗しました - それがエラーの原因です。逆にそうだったら、

var foo = { "results" : [ { "address_components" : [

また

callback({ "results" : [ { "address_components" : [ ...  } )

それは有効なjavascriptになります。後者は、jsonp が実際に返すことに依存しているものです。

結論として、有効な JSON が返されますが、オリジン ポリシーが同じであるため、XmlHttpRequest 経由で直接アクセスすることはできません。また、関数がラップされた JSONP ではないため、同じオリジンの問題を回避するために JSONP が依存している SCRIPT バックドア経由で使用することはできません。Web ページでこれを使用するための唯一のオプションは、Google が提供するクラスを使用することです。これらのクラスも Google サイトのものであるため、JSON にアクセスして正常に解析でき、処理された結果を返します。

于 2012-06-13T10:23:39.807 に答える
1

dataType: jsonp,の代わりに試してくださいdataType: jsomp,

于 2012-06-13T09:43:16.413 に答える
0

ajax設定に以下を追加してみてください:

 contentType: "application/json; charset=utf-8";

編集 :

これは私がfirebugで見たものです:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "285",
               "short_name" : "285",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Bedford Ave",
               "short_name" : "Bedford Ave",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Williamsburg",
               "short_name" : "Williamsburg",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Brooklyn",
               "short_name" : "Brooklyn",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "New York",
               "short_name" : "New York",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Kings",
               "short_name" : "Kings",
               "types" : [ "administrative_area_level_2", "political" ]
            },

            .
            .
            .
于 2012-06-13T10:06:44.287 に答える
0

問題は、ajax リクエストが何も返さないことにあるようです。おそらく空の文字列は有効な JSON ではありませんか?

編集:そして今です!以下の「フィドル」を初めて試みたとき、Firebug は要求に対して空の応答を報告しました!

于 2012-06-13T10:13:39.187 に答える