2014-01-14 45 views
1

當我嘗試爲網址使用Ajax時,出現Access-Control-Allow-Origin錯誤(沒有意外,因爲我還沒有跨域策略文件)。令我驚訝的是獲取正確的錯誤信息是。這裏是我的JS:如何從jqXHR對象獲取Access-Control-Allow-Origin錯誤?

$.ajax({ 
    url: e.target.href, 
    dataType: 'html' 
}).always(function (xhr, textStatus, errorThrown) { 
    console.log("xhr.status: " + xhr.status); 
    console.log("xhr.statusText: " + xhr.statusText); 
    console.log("xhr.readyState: " + xhr.readyState); 
    console.log("xhr.responseText: " + xhr.responseText); 
    console.log("xhr.responseXML: " + xhr.responseXML); 
    console.log("textStatus: " + textStatus); 
    console.log("errorThrown: " + errorThrown); 
    console.log("xhr.redirect: " + xhr.redirect); 
    $('#output').html(xhr.responseText); 

}); 

,這裏是錯誤

XMLHttpRequest cannot load {url}. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '{url}' is therefore not allowed access. 

這裏的控制檯日誌是我寫的,你可以看到有沒有正確的錯誤消息的提控制檯日誌。

xhr.status: 0 
xhr.statusText: error 
xhr.readyState: 0 
xhr.responseText: 
xhr.responseXML: undefined 
textStatus: error 
errorThrown: 
xhr.redirect: undefined 

如何獲取正確的錯誤文本?

JSFiddle

回答

2

您可以處理錯誤客體並獲得國家:

error : function(e) { 
    $('#output').append("state: " + e.state()); 
    $('#output').append("<br/>"); 
} 

你應該得到 '拒絕'

+1

測試和糾正的jsfiddle - http://jsfiddle.net/ hMupL/5/ –

+0

狀態「已拒絕」並不比默認消息「錯誤」好得多,是否真的沒有辦法獲得更好的錯誤信息?作爲後續,「拒絕」始終與「否」Access-Control-Allow-Origin標題存在相同。「? – devzero

+0

我不確定你可以得到'Access-Control-Allow-Origin'變量,因爲響應和響應頭在瀏覽器運行時被阻塞,控制檯日誌消息從它發出,因此永遠不會傳遞給JavaScript引擎。 – davidonet