2013-08-07 101 views
1

我試圖做一個ajax調用谷歌的地方API來獲得業務評論,但沒有成功。 使用如何發送跨域請求到谷歌地方API(似乎不支持JSONP)?

crossDomain : true,dataType: 'jsonp',

是給錯誤

Uncaught SyntaxError: Unexpected token :

我認爲它不支持jsonp ..是有沒有辦法得到它?

感謝

+0

[Access-Control-Allow-Origin使用Google Maps JavaScript API v3]的可能重複(http://stackoverflow.com/questions/17784508/access-control-allow-origin-using-google-maps-javascript- api-v3) –

回答

2

請嘗試下面的代碼獲取從谷歌廣場API響應

 $.ajax({ 
     type: 'GET', 
     url: 'https://maps.googleapis.com/maps/api/place/autocomplete/json?&input=Houston&sensor=true&types=(cities)&key=<Your Key>', 
     async: false, 
     jsonpCallback: 'jsonCallback', 
     contentType: "application/json", 
     dataType: 'jsonp', 
     success: function (json) { 
      console.dir(json.sites); 
     }, 
     error: function (e) { 
      console.log(e.message); 

     } 
    }); 

谷歌在廣場JSONP回調的形式迴應API.kindly更換你的鑰匙在URL

+2

在返回的json中出現錯誤「Uncaught SyntaxError:Unexpected token:」。 –

+0

同樣在這裏,不知道這是否曾經做過,但它不再做 – mobetta

0

我我剛剛遇到了這種情況,(雖然不完全是JavaScript),我找到了一個很好的解決方案。

使用ASP.NET,您可以創建一個執行System.Net.HTTPWebRequest的通用處理程序,然後將結果返回給ajax請求。

JAVASCRIPT:

 $.ajax({ 
      url: 'navHandler.ashx', 
      type: 'GET', 
      data: { 
       'action': 'getDirection', 
       'url':'https://maps.googleapis.com/maps/api/directions/json?origin='+ myLocation.coords.latitude + ',' + myLocation.coords.longitude + 
       '&destination=' + toAddress.value.replace(' ', '+') + 
       '&key=<YOUR API KEY>' 
      }, 
      success: function (data) { 
       console.log(JSON.parse(data)); 
      } 
     }); 

ASP:

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 

    Dim qs = context.Request.QueryString 
    Select Case qs("action") 
     Case "getDirection" : context.Response.Write(getDirections(qs)) 

    End Select 

End Sub 

Private Function getDirections(qs) 
    Return getWebResponse(qs("url")) 
End Function 

Private Function getWebResponse(url As String) 
    Dim req As System.Net.HttpWebRequest = System.Net.WebRequest.Create(url) 
    With req 
     .Method = "GET" 
     Using sr As New IO.StreamReader(.GetResponse.GetResponseStream) 
      Return sr.ReadToEnd 
     End Using 
    End With 
End Function 

理論上這可以解決大部分的跨域問題。希望這可以幫助某人。