2014-06-18 49 views
0

我試圖做一個CORS調用服務器,我試圖使用javascript/jquery沒有運氣,但PHP工作正常。我能做些什麼來完成這項工作?CORS呼叫在PHP中工作,但不是在JavaScript/jquery

我的PHP代碼(工作):

function getQueries(){ 
    $curl = curl_init(); 

    $url = "http://some-domain/search/"; 

    // Optional Authentication: 

    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept-Language: en-US')); 

    $output = curl_exec($curl); 
    curl_close($curl); 
    return json_decode($output); 
} 

我的JavaScript代碼(不工作):

$.ajax({ 
    url: "http://some-domain/search/", 
    type: "GET", 
    datatype: "json", 
    beforeSend: setHeader, 
    success: makeDiv() 
}); 

function setHeader(xhr) { 
    xhr.setRequestHeader('Accept-Language', 'en-US'); 
} 

處理PHP代碼,將數據發送到javascript和調度等事已成爲一種痛苦,並希望擺脫PHP,並通過Javascript/JQuery使一切工作。

任何幫助表示讚賞。

+0

如果可能,可以發佈url?謝謝 – guest271314

+3

在PHP中,據我所知沒有相同的原產地策略限制(不是PHP傢伙)......它是一個瀏覽器功能...所以爲了使ajax調用在客戶端工作,目標資源已經以支持CORS(需要將CORS頭添加到響應中) –

+1

如果目標源不支持CORS,則可以使PHP服務器像代理服務器一樣工作,該代理服務器將請求委託給目標源,然後將響應轉發給客戶端 –

回答

1

CORS用於在Web瀏覽器中跨多個域共享資源(以避免同源策略違規)。

由於PHP中的http客戶端實現不受同源策略限制的限制,CORS不會對其產生任何影響。

但是,如果您嘗試使用ajax訪問外部域並且它不支持CORS,那麼瀏覽器將拋出相同的原始策略違例錯誤。

要克服這個問題,要麼目標資源必須添加對CORS的支持,要麼可以讓Web服務器像代理一樣接收來自瀏覽器的請求,並將請求轉發給目標資源,然後接收響應並轉發迴應客戶。