IE8 jquery ajax獲取靜態資源報錯TypeError 拒絕訪問

1,出現問題的代碼:

Js代碼  收藏代碼
  1. /*** 
  2.     * 請求靜態html 模板 
  3.     * @param url 
  4.     * @param $jqueryDiv : 四個主要div之一 
  5.     * @param templateHandle : 自定義,用於使用Dot js模板函數 
  6.     * @param callback : 用於實現模板之後,綁定事件 
  7.     * @param templateData : cia的返回數據 
  8.     */  
  9.    ajaxHtml: function (url, $jqueryDiv, templateHandle, callback, templateData) {  
  10.        xhr.ajaxHtmlCommon(url, $jqueryDiv, null, templateHandle, callback, templateData);  
  11.    },  
  12.    /*** 
  13.     * ajax 請求靜態html文件 
  14.     * @param url 
  15.     * @param $jqueryDiv 
  16.     * @param data 
  17.     * @param callback : 回調函數,updateHtml 方法之後執行 
  18.     */  
  19.    ajaxHtmlCommon: function (url, $jqueryDiv, requestData, templateHandle, callback, templateData) {  
  20.        var argument_length = arguments.length;  
  21.        var isHasCallback = (argument_length > 4 && callback && typeof callback === 'function');  
  22.        var options22 = {  
  23.            url: url,  
  24.            type: "GET",  
  25.            timeout: 18000,  
  26.            dataType: 'html',  
  27.            success: function (html) {  
  28.                updateHtml($jqueryDiv, html, templateHandle, templateData);  
  29.                /* var $formInput = jqueryObj.find('textarea:first');//讓subContent 中的textarea聚焦 
  30.                 if ($formInput.length != 0) {//先判斷能不能獲取到textarea 
  31.                 $formInput.get(0).focus(); 
  32.                 }*/  
  33.                if (isHasCallback) {  
  34.                    callback($jqueryDiv, html);  
  35.                }  
  36.            },  
  37.            error: function (er) {  
  38.                if (er.statusText == 'timeout') {  
  39.                    updateHtml($jqueryDiv, "<div style='color: red'>連接服務器超時!</div>");  
  40.                } else {  
  41.                    var errorMessage2;  
  42.                    if (er.responseText) {  
  43.                        errorMessage2 = er.responseText;  
  44.                    } else {  
  45.                        errorMessage2 = er.statusText;  
  46.                    }  
  47.                    console.log('error:' + errorMessage2);  
  48.                    updateHtml($jqueryDiv, errorMessage2, templateHandle, templateData);  
  49.                }  
  50.                if (isHasCallback) {  
  51.                    callback($jqueryDiv, er);  
  52.                }  
  53.            }  
  54.        };  
  55.        if (argument_length > 2 && requestData != null && requestData != undefined) {  
  56.            options22.data = requestData;  
  57.            options22.type = "POST";  
  58.        }  
  59.        $.ajax(options22);  
  60.    }  

瀏覽器版本:IE8

獲取html模板時報錯:

Js代碼  收藏代碼
  1. var ajaxHtml4IE8 = function () {  
  2.             xhr.ajaxHtml('cross_domain.html', $('#crossDiv'), nullnullnull);  
  3.         }  

報錯信息:TypeError 拒絕訪問 

 

 2,解決方法:

(1)在js文件頭部增加:

Js代碼  收藏代碼
  1. jQuery.support.cors = true;  

(2) html文件引入jQuery.XDomainRequest.js

Java代碼  收藏代碼
  1. <!--[if IE 8]>  
  2.     <script type="text/javascript"  
  3.             src="jQuery.XDomainRequest.js"></script>  
  4.     <![endif]-->  

(3) 靜態html模板前面增加:

<meta http-equiv="Access-Control-Allow-Origin" content="*">

 

注意:

(1)靜態HTML模板前要增加<meta http-equiv="Access-Control-Allow-Origin" content="*">,表示服務器端支持跨域.

(2)只有IE8 纔有跨域拒絕訪問的問題,所以引入第三方js文件時,要使用<!--[if IE 8]>

jQuery.XDomainRequest.js 見附件

參考:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

http://stackoverflow.com/questions/10232017/ie9-jquery-ajax-with-cors-returns-access-is-denied

0 
1 
分享到:  
評論
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章