2012-06-13 36 views
3

我試圖使用latidute和longitude來獲取城市名稱。如何從谷歌地理編碼解析json(jquery)?

谷歌地理編碼支持此選項,並稱爲「Reverse geocoding」。 而作爲樣品中寫有我必須做出一個GET請求,此鏈接:

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

它返回我數組中JSON,你可以試試。

我該如何解析jQuery中的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); 
     } 

    }) 

我得到這個數組,但無法解析。它說:

Uncaught SyntaxError: Unexpected token :

我該如何解決這個問題?

+0

除了錯字'jsomp',它看起來應該可以工作。 – Christoph

+0

@Christoph。那麼你可以upvote這個問題說... – gdoron

+0

@gdoron我知道我可以,只有upvoter自己知道,如果它可能是我或不... – Christoph

回答

2

簡答題;你不能:在這裏不支持JSONP(或者至少沒有實際記錄爲支持),請改用Geocoder類。

Google Geocoding APIs say:

Looking to use this service in a JavaScript application? Check out the Geocoder class of the Google Maps API v3.

似乎谷歌只提供了簡單的JSON,你不能在自己的網頁由於同源策略解析 - 但如果你是例如,你可以消費。運行在另一臺服務器上的php應用程序沒有此限制。所以,如果你想在網頁上使用它,使用他們的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後門來解決相同的原始問題。您在網頁上使用這個選項的唯一選擇是使用Google爲您提供的課程 - 因爲他們也來自Google網站,所以他們可以訪問JSON併成功解析它 - 並將處理後的結果返回給您。

1

嘗試dataType: jsonp,而不是dataType: jsomp,

+0

對不起我的錯誤,在真實的代碼是正確的情況下:「jsonp」,仍然不工作。 給我一會兒,我會在jsfiddle中顯示它 – Denis

+0

看看http://jsfiddle.net/MkjNd/1/ – Denis

+0

也許有人知道另一種解析方式嗎? – Denis

0

嘗試在阿賈克斯設置添加以下內容:

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

編輯:

這是我看到了螢火蟲:

{ 
    "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" ] 
      }, 

      . 
      . 
      . 
+0

http://jsfiddle.net/MkjNd/3/ 看,仍然不工作 – Denis

+0

非常有趣!我檢查了它與firebug.i看到,響應已received.it似乎這是一個在jquery中的錯誤。 –

+0

並且是有效的json響應?你能解析一下嗎? – Denis

0

這個問題似乎是Ajax請求沒有返回任何東西。推測空字符串不是有效的JSON?

編輯:現在它是!我第一次嘗試下面的'小提琴'時,Firebug報告了對請求的一個空的迴應!

+0

不,數組不爲空,看起來像串無效的JSON,但我不明白爲什麼。 https://dl.dropbox.com/u/38721261/1.PNG https://dl.dropbox.com/u/38721261/2.PNG – Denis

+0

Firefox Web開發者工具條建議提出JSON問題 - 它不喜歡「結果」標籤... –

+0

json很好,問題是當使用datatype =「jsonp」時,jQuery會通過腳本標籤加載它;並且json不是獨立的javascript;它需要回調(...)包裝器在該上下文中可被解析,請參閱我的答案以獲取更多詳細信息。 – BrendanMcK