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 
分享到:  
评论
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章