3

GooglePlacesAPIが一般提供になりました。jQueryで.ajax()呼び出しを使用して、Googleプレイスを呼び出そうとしています。私が繰り返し返すエラーは、Uncaught SyntaxError:Unexpected token:です。

jQuery1.5.2を使用しています。1.5.1も試してみましたが、同じ結果になりました。手伝うことができれば、1.6.1に移行したくありません。

それ以来、他のAPIに対してこのようなajax呼び出しを行ってきましたが、Googleプレイスで問題が発生しています。以下は、操作できるコードの非常に基本的なサンプルです。Googleが提供するAPIコンソール(https://code.google.com/apis/console)で独自のキーを取得する必要があります

jQuery.noConflict();
 jQuery(document).ready(function(){

  var url = 'https://maps.googleapis.com/maps/api/place/search/json';

  jQuery.ajax({
   url: url,
   dataType: 'jsonp',
   type: 'GET',
   data:  {
     location: '33.787794,-117.853111',
     radius: 1000,
     name: 'coffee',
     key: 'your_key', // add your key here
     sensor: 'false'
     },

   // on success
   success: function(data, textStatus, jqXHR){

      console.log(data);


   },

   // on failure
   error: function (jqXHR, textStatus, errorThrown){
    console.log(jqXHR);
    console.log(textStatus);
    console.log(errorThrown);
   }
   });
 });
4

2 に答える 2

5

ドキュメントからわかることから、Google Places Web Service API はJSONP をサポートしておらず、JSON のみをサポートしています。表示されているエラーは、応答が単なる JSON であるにもかかわらず、JSONP であるかのように解析され、エラーが発生するためです。

Google Maps JavaScript API を確認してください。これには、使用できる Places ライブラリが含まれています。 を参照してくださいgoogle.maps.places.PlacesServices#search()

私の知る限り、JSONP サポートを削除する方向にシフトしているようです。開発者が代わりに JavaScript API を使用することを奨励するためではないかと誰かが示唆しました。

于 2011-05-23T23:50:45.347 に答える
4

以下は直接的な解決策ではありません。しかし、それが私がそれを機能させた方法です...

JSONP はサポートされていないため (クライアント コードがその API をどのように使用するのか理解できませんでした)、解決策はサーバー経由でプロキシすることです...サーバー側でレールを使用する場合は、以下のようになります。あなたのために働くかもしれません:

class PlacesController < ApplicationController
    def autocomplete
        # Using Google Web Services
        # https://code.google.com/apis/console
        url = "https://maps.googleapis.com/maps/api/place/autocomplete/json"
        _params = {
            :key => "<<< YOUR KEY >>>",
            :types => "geocode",
            :sensor => (params[:sensor] or false),
            :input => params[:q]
        }
        ans = %x{curl -G --data-urlencode #{_params.map{|k,v| "#{k}=\"#{v}\""}.join(" --data-urlencode ")} "#{url}"}
        ans = ActiveSupport::JSON.decode(ans)
        render :json => ans
    end
end

PS: API キーを生成するには、https://code.google.com/apis/consoleを使用します。

于 2011-11-15T13:30:22.883 に答える