![](/img/trans.png)
[英]Buffered Video in JQuery throws Javascript error in IE9 and Opera
[英]IE9 JQuery.ajax throws mystery error
我在IE9中遇到困難的Ajax錯誤。 我會先說,從技術上講,這不是跨域請求,所以我確定這不是問題。
編輯 :看來問題可能與同域請求被視為跨域請求有關,盡管不清楚原因(請參閱注釋)。
我正在使用本地代理發出跨域Ajax請求,並且我使用的url看起來像http://localhost/proxy/?target=.....
所有好的瀏覽器都對此感到滿意,但是IE會立即返回一個甚至在分派請求之前發生錯誤(我已經使用Fiddler和IE的開發人員工具網絡捕獲驗證了這一點)。
當我檢查傳遞給JQuery的ajax.error回調的錯誤對象時,其isRejected()
函數返回true,但是我無法確定導致請求被拒絕的原因。 錯誤對象的readyState為4(表示請求已完成?),狀態為0,statusText為“錯誤”。
我正在建立這樣的請求:
$.ajax(url, {
data: {...list of parameters...},
dataType: 'json',
type: 'GET',
success: function() { ... },
error: function() { ... },
beforeSend: proxy.beforeRequestSend,
timeout: 35000
});
proxy.beforeRequestSend函數如下所示:
this.beforeRequestSend = function(XHR, settings) {
if(that.proxyRequired(settings.url)) {
// I've also tried using the full url (http://localhost/proxy/?...)
settings.url = 'proxy/?target=' + encodeURIComponent(settings.url);
}
};
有誰知道會導致請求在IE9中完全失敗的原因? 不幸的是,我無法訪問IE8或7進行測試,但我認為它們的行為相同。 調用JQuery的ajax錯誤處理程序的事實表明,在構建請求時不會發生錯誤,但是應該在執行該錯誤時發生。 所有其他瀏覽器都正常工作,這告訴我基本原理是正確的。
我以前曾讀過JQuery / IE組合在對某些字符進行url編碼時that.proxyRequired(settings.url)
問題,但是如果我在beforeSend函數末尾警告settings.url
,則目標URL已正確編碼(這也告訴我that.proxyRequired(settings.url)
返回true)。
任何輸入非常感謝。
在您的JavaScript中,在調用$ .ajax(或等效方法)之前,強制跨域行為:
JQuery.support.cors=true;
您的代理動作是否發送重定向以響應ajax調用? 瀏覽器無聲地跟隨重定向,這可能是XHR檢測XSS嘗試的原因。 由於jQuery在IE9上不支持CORS,因此您會遇到錯誤。
參見另一個Stackoverflow問題: 跨域Ajax請求在Opera和IE9中不起作用?
正如您在我的問題的代碼中看到的那樣,我在JQuery.ajax函數的proxy.beforeRequestSend
回調( proxy.beforeRequestSend
)中添加了代理URL。 到該函數執行時,JQuery已經檢查了請求並確定它是跨域的。
結果,JQuery將我所有的請求都視為跨域,即使它們都去了本地代理。 然后,JQuery拒絕了IE和Opera中的任何跨域請求,因為它們不支持CORS。
幸運的是,crossDomain屬性被傳遞到settings
對象中的beforeSend回調,並且可以輕松更改。
this.beforeRequestSend = function(XHR, settings) {
if(that.proxyRequired(settings.url)) {
settings.url = 'proxy/?target=' + encodeURIComponent(settings.url);
settings.crossDomain = false;
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.