2011-05-23 54 views
3

Google Places API現在通常可用。我正嘗試在jQuery中使用.ajax()調用來調用Google Places。我一直收回的錯誤是未捕獲的SyntaxError:意外的令牌:使用jQuery查詢Google Places API

我正在使用jQuery 1.5.2。我也嘗試過1.5.1,但結果相同。如果我能幫上忙的話,我寧願不移動到1.6.1。

我剛剛對其他API做了這樣的ajax調用,但是在Google Places中遇到了問題。下面是你可以玩的一個非常基本的代碼示例。你需要去獲得在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

從我可以從文檔中,谷歌的地方看到自己的密鑰Web服務API不支持而不支持支持JSONP - 僅支持JSON。您看到的錯誤是因爲響應僅僅是JSON,但正在被解析,就好像它是JSONP並導致錯誤。

查看Google Maps JavaScript API - 它包含您可以使用的Places庫 - 請參閱google.maps.places.PlacesServices#search()。 AFAIK似乎正在轉向消除JSONP支持 - 例如,用於在v2中支持JSONP(無證)的Geocoding API,但不再在v3中。有人建議它可能是爲了鼓勵開發人員改用JavaScript API。

+0

該服務的谷歌地圖API服務條款要求的API(包括各種網絡服務,如地理編碼和地點)可與「Google地圖」結合使用。這意味着,當在網頁中使用服務時(這是JSONP的用處),您將需要加載API來顯示地圖,所以沒有理由不使用相關的API類來訪問這些服務。在許多情況下,無論如何這都更容易,因爲您不必構造或UR​​L編碼URL,並且結果會轉換爲相關的Maps API對象(例如,google.maps.LatLng)。 – 2011-05-24 01:07:56

+0

@Thor很高興知道,謝謝! – 2011-05-24 01:29:12

+0

@Thor,我不認爲這是真的,因爲他們發佈是公開的。該文檔現在狀態...「如果您的應用程序在頁面上顯示Places API數據或視圖不顯示Google Map,則必須顯示帶有該數據的」由Google支持「徽標。」 – hemmeter 2011-05-25 17:49:02

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