1,出现问题的代码:
/*** * 请求静态html 模板 * @param url * @param $jqueryDiv : 四个主要div之一 * @param templateHandle : 自定义,用于使用Dot js模板函数 * @param callback : 用于实现模板之后,绑定事件 * @param templateData : cia的返回数据 */ ajaxHtml: function (url, $jqueryDiv, templateHandle, callback, templateData) { xhr.ajaxHtmlCommon(url, $jqueryDiv, null, templateHandle, callback, templateData); }, /*** * ajax 请求静态html文件 * @param url * @param $jqueryDiv * @param data * @param callback : 回调函数,updateHtml 方法之后执行 */ ajaxHtmlCommon: function (url, $jqueryDiv, requestData, templateHandle, callback, templateData) { var argument_length = arguments.length; var isHasCallback = (argument_length > 4 && callback && typeof callback === 'function'); var options22 = { url: url, type: "GET", timeout: 18000, dataType: 'html', success: function (html) { updateHtml($jqueryDiv, html, templateHandle, templateData); /* var $formInput = jqueryObj.find('textarea:first');//让subContent 中的textarea聚焦 if ($formInput.length != 0) {//先判断能不能获取到textarea $formInput.get(0).focus(); }*/ if (isHasCallback) { callback($jqueryDiv, html); } }, error: function (er) { if (er.statusText == 'timeout') { updateHtml($jqueryDiv, "<div style='color: red'>连接服务器超时!</div>"); } else { var errorMessage2; if (er.responseText) { errorMessage2 = er.responseText; } else { errorMessage2 = er.statusText; } console.log('error:' + errorMessage2); updateHtml($jqueryDiv, errorMessage2, templateHandle, templateData); } if (isHasCallback) { callback($jqueryDiv, er); } } }; if (argument_length > 2 && requestData != null && requestData != undefined) { options22.data = requestData; options22.type = "POST"; } $.ajax(options22); }
浏览器版本:IE8
获取html模板时报错:
var ajaxHtml4IE8 = function () { xhr.ajaxHtml('cross_domain.html', $('#crossDiv'), null, null, null); }
报错信息:TypeError 拒绝访问
2,解决方法:
(1)在js文件头部增加:
jQuery.support.cors = true;
(2) html文件引入jQuery.XDomainRequest.js
<!--[if IE 8]> <script type="text/javascript" src="jQuery.XDomainRequest.js"></script> <![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