2014-07-22 268 views
2

我已經嘗試了很多次,以獲得這項工作,但似乎無法達到目的。CORS請求與jQuery Ajax和PHP

當我第一次實現這個功能時,它完美地處理了一些請求,然後無處可逃。它停止工作。

下面是從油脂/篡改猴腳本我的代碼運行:

$.ajax({ 
    url: 'ServerLinkHere', 
    crossDomain: true, 
    data: { 
     artist: artist, 
     track: title, 
     link: data.url 
    }, 
    type: 'POST', 
    success: function (resp) { 
     console.log(resp.responseText); 
    } 
}); 

這裏是我的服務器端腳本(在不同的線程由於從用戶加尼甚服用):

// Allow from any origin 
if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
    header('Access-Control-Allow-Credentials: true'); 
    header('Access-Control-Max-Age: 86400'); // cache for 1 day 
} 

// Access-Control headers are received during OPTIONS requests 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
     header("Access-Control-Allow-Methods: GET, POST, OPTIONS");   

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
     header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 

    exit(0); 
} 

後,代碼,我做我的計算:下載一個文件,然後返回到文件下載的鏈接作爲正文。

目前,似乎計算正在運行,因爲文件確實出現在文件系統上。

但是,當它返回一個鏈接時,chrome瀏覽器仍會拋出訪問控制錯誤。這裏有一個調試畫面(想不出直接連接,沒有代表):

不過,我也迷上了代理CharlesProxy調試器和調試器顯示一切是一種好的。這裏的響應的畫面:

難道這是一個預檢問題?沒有OPTIONS發送給我。

+0

你的答案就在這裏:http://stackoverflow.com/問題/ 20442628/cors-jquery-ajax-request – pid

+0

我已經正確設置了標題。它仍然不起作用。爲了給您帶來疑義,我重新創建了相同的請求/響應解決方案,並且仍然返回了相同的錯誤。 –

+0

控制檯說什麼? – hex494D49

回答

2

嘗試註釋掉你的服務器端腳本(只是呼應用於調試的目的,一些虛擬的字符串),然後添加到您的htaccess:

SetEnvIf Origin ^(.*)$ ORIGIN_DOMAIN=$0 
<Files "*"> 
    Header add Access-Control-Allow-Origin %{ORIGIN_DOMAIN}e 
    Header add Access-Control-Allow-Methods "GET, POST, OPTIONS" 
    Header add Access-Control-Allow-Headers "Authorization, X-Requested-With, Content-Type, Origin, Accept" 
    Header add Access-Control-Allow-Credentials "true" 
</Files> 
+0

我編輯了文件,只輸出一個html hi並註釋掉了其餘的代碼。我的.htaccess文件被編輯,因此它反映了你的。從jsfiddle請求時仍不起作用 –

+0

有任何錯誤?嘗試不呼應任何東西,然後;) – silkfire

+0

除了通常的xmlhttprequest無法加載...沒有任何錯誤從鉻控制檯沒有訪問控制的bla bla bla。我注意到一個奇怪的事情是,調試我的問題的人重新創建了他的請求,並在我訪問該頁面時爲他工作。它沒有工作。這可能是客戶端問題嗎? –