2011-07-29 96 views
3

我想請求從谷歌Places API的JSON,但之後首先包括我仍然得到跨域請求錯誤:的Javascript:跨域JSON請求發出

<?php 
header('Access-Control-Allow-Origin: *'); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Allow-Headers: x-requested-with"); 
?> 

我使用的JSON請求是標準的jQuery:

function load() { 
    var url = 'https://maps.googleapis.com/maps/api/place/details/json?reference=CnRhAAAARMUGgu2CeASdhvnbS40Y5y5wwMIqXKfL-n90TSsPvtkdYinuMQfA2gZTjFGuQ85AMx8HTV7axABS7XQgFKyzudGd7JgAeY0iFAUsG5Up64R5LviFkKMMAc2yhrZ1lTh9GqcYCOhfk2b7k8RPGAaPxBIQDRhqoKjsWjPJhSb_6u2tIxoUsGJsEjYhdRiKIo6eow2CQFw5W58&sensor=true&key=xxxxxxxxxxxxxx'; 
    $.ajax(url, { 
     async: true, 
     success: function(data, textStatus, jqXHR) { 
      dump(data); 
     } 
    }); 
} 

我會用一個JSONP查詢,而不是,但谷歌Places API所不支持JSONP ...我怎樣才能解決這個問題?使用代理服務器?我不知道該怎麼做,或者我做錯了什麼。

+0

您需要使用[Maps JavaScript API](http://code.google.com/apis/maps/documentation/javascript/)。 –

回答

4

您請求的數據的URL 必須授予訪問控制標頭權限。它會擊敗相同來源政策的對象是一個遠程來源可以授予自己的權限!

如果您使用的API沒有提供JSON-P API,也沒有設置訪問控制頭本身,那麼您需要使用代理。無論你是自己運行還是第三方轉換爲JSON-P(例如YQL)。

+0

一個小小的說明:如果您使用的API沒有提供JSON-P API,不會自行設置訪問控制頭文件*,並且不提供/託管JavaScript庫以供您包含和與*進行交互,那麼你需要使用代理。例如,如果您包含JavaScript API並通過瀏覽器進行調用,則可以在不使用JSON-P的情況下向Google Maps API發出跨域請求。 – aroth