2013-10-07 28 views
2

我嘗試進行跨域請求。爲了能夠做到這一點,我必須設置一個http頭。XMLHttpRequest未通過使用.setRequestHeader設置

$.ajax({ 
       type: 'GET', 
       url: 'api', 
       beforeSend: function (request) 
       { 
        request.setRequestHeader('authorization', 'Basic ...=='); 
       }, 
       success: function(data) { 
        debugger; 
       } 
      }); 

beforeSend方法似乎要被調用,但 '授權' 報頭沒有被設置。你能幫我解決這個問題嗎?

更新:這裏有收到CORS標題:

Access-Control-Allow-Origin : localhost 
Access-Control-Allow-Credential: true 
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS 

它看起來像訪問控制允許報頭缺失。

+0

你確定你的API支持CORS嗎?你在這裏描述的症狀強烈表明它沒有。或者至少它不支持設置授權標頭。確保你的API發送正確的CORS頭文件。也看看谷歌瀏覽器的控制檯,看看可能的錯誤。這就是那種警告將會被釋放的地方。 –

回答

2

確保您的API支持CORS並且Authorization是允許設置的請求標頭。當您發送OPTIONS請求到端點的API應該具有以下響應頭回應:

Access-Control-Allow-Headers:X-Requested-With, Content-Type, Authorization 
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin:* 

這允許客戶端調用API方法時所設置的X-Requested-WithContent-TypeAuthorization請求頭和它允許GETPOSTPUT,DELETE,OPTIONS來自任何來源域的動詞。

因此,爲了調試問題,請發送OPTIONS請求到您的API端點並觀察響應HTTP標頭。

+1

謝謝達林給你答案!它看起來像服務器不設置Access-Control-Allow-Headers標頭。 –

+0

這就是問題所在。在這種情況下,您無法執行跨域AJAX請求。 –

相關問題