2011-07-02 61 views
1

我試圖使用谷歌地圖的REST api轉換在地址的輸入到座標。爲此,我使用jQuery的getJSON函數,因爲它使用本機JSONP調用。jQuery getJSON將無法在跨域

雖然它不會工作,但它不會成功,所以警報永遠不會被調用。

$("#makeCords").click(function(){ 
    straat = $('#straat').val(); 
    stad = $('#Stad').val(); 
    land = $('#Country').val(); 
    if(straat == "" || stad == "" || land == ""){ 
     alert("Onvoldoende gegevens! Vul straat, stad en land aan voor het gebruik van de ´bereken coordinaten´ functie."); 
    }else{ 
     $.getJSON("http://maps.google.com/maps/api/geocode/json?callback=?", 
     { 
      adress: straat +", " + stad +", " + land, 
      sensor: "false" 
     }, 
      function(data) { 
       alert(data); 
      }); 
    } 
}); 
+0

如果您使用URL'http:// maps.google.com/maps/api/geocode/json'會發生什麼? – Dogbert

+0

不是'地址'是一個錯字? –

+0

地址確實是一種類型。但是,谷歌仍然會以json格式迴應錯誤。所以警報仍然應該執行。不是這樣。 – Boyd

回答

3

谷歌地圖地理編碼API不支持JSON-P;它會忽略你的callback參數,因此跨域JSON-P將不起作用。

您應該使用官方Google Maps Javascript程序庫來代替。庫內部確實使用JSON-P傳遞信息(因爲它是幾乎是做跨域請求的唯一方式),但該URL僅供官方庫使用。

+1

我剛剛發現,使用Chrome Javascript控制檯,收到JSON數據但出現以下錯誤:'未捕獲的SyntaxError:意外的令牌:' 這是否意味着它能夠正常工作,但不知何故錯誤的來源在別處或sh我是否應該使用Google Maps JavaScript庫? – Boyd

+0

無論如何,你應該使用JS庫。 – timdream

+0

不確定,但getJSON可能會期望類似'jQuery15204934664060250754_1309622592360({/ * json data * /})',而不是它獲得'{/ * json data * /'' –

0

嘗試添加&格式= JSON您獲取傑森網址和chaneg &回調=?到& jsoncallback =?

+0

到目前爲止,這個URI已經可以使用了,但是google返回的是乾淨利落的json,但我知道這是因爲我在瀏覽器中粘貼了URI。 jQuery的ajax和getJSON函數都不會執行成功函數。 – Boyd

0

嘗試jQuery的JSONP:

$.ajax({ 
    type: "GET", 
    url: "http://url", 
    dataType: "jsonp" , 
    success: function (data) { 

    } 
}); 
+0

仍然沒有得到成功的功能。 – Boyd

-2

這難道不是一種安全的JavaScript(在這種情況下,jQuery的)永遠不會獲得或發佈數據之外它自己的域(至少就我知道javascript不允許postget跨域)?您可以使用本地php腳本通過curl從google服務器收集json信息,並將您的get-query發送到本地腳本。我會給這個解決方法一個嘗試...

另一種方法是使用谷歌地圖api的JavaScript。您可以使用該api的地理編碼函數從給定地址檢索經度和緯度。所以你不需要做任何獲取或發佈...

+0

JSONP實際上不是向其他服務器發出請求的方式嗎?我無法使用PHP curl,因爲我的客戶端的託管服務提供商不允許它:(當您使用帶回調的getJSON時,。 – Boyd

+0

=請求變成了一個跨域的JSONP請求。這應該是一個評論,而不是回答-1 –

+0

正如我已經說過的,我敢肯定,這是一個安全問題,Javascript不允許跨域獲取或發佈,因爲你的提供者拒絕使用curl,你仍然可以使用谷歌地圖api ... – Marco