Jquery在IE7下无法使用 $.ajax解决方法


Posted in Javascript onNovember 11, 2009

通过查看源码发现

// Create the request object; Microsoft failed to properly 
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available 
// This function can be overriden by calling jQuery.ajaxSetup 
xhr:function(){ 
return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); 
},

以下是这个jquery的源码的版本声明
/* 
* jQuery JavaScript Library v1.3.2 
* http://jquery.com/ 
* 
* Copyright (c) 2009 John Resig 
* Dual licensed under the MIT and GPL licenses. 
* http://docs.jquery.com/License 
* 
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) 
* Revision: 6246 
*/

通过一个html打印“window.ActiveXObject ”的结果可以知道IE6、IE7和IE8都是返回的true,
测试的html源码为(同一个目录下有一个名为index.jsp页面,内容无所谓。)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
<script type="text/javascript" src="javascript/jquery.js"></script> 
<script type="text/javascript"> 
$(function (){ 
$.ajax({ 
url:"index.jsp", 
success:function(){alert("success")}, 
error:function(){alert("error")} 
}); 
//$("div").append("<font color='red'>window.ActiveXObject:</font>"); 
//$("div").append((window.ActiveXObject?"true":"false")); 
//alert(typeof(new XMLHttpRequest())); 
//alert(typeof(new ActiveXObject("Msxml2.XMLHTTP.4.0"))); 
//alert(typeof(new ActiveXObject("Msxml2.XMLHTTP"))); 
//alert(typeof(new ActiveXObject("Microsoft.XMLHTTP"))); 
}); 
</script> 
</head> 
<body> 
<div></div> 
</body> 
</html>

情况一:
不修改源码,则IE6中可以弹出“success”的提示,而IE7却没有任何提示,连错误提示都没有。
情况二:
将源码中的
window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
修改为
window.ActiveXObject ? new XMLHttpRequest() : new XMLHttpRequest();
则IE7中是弹出“success”的提示,而IE6却提示js错误,详情大概为”XMLHttpRequest对象未定义“
两种情况下FireFox都可以正常提示“success”,版本是FireFox3.5.3,其他浏览器不知道。
由此可见IE7中需要使用new XMLHttpRequest()初始化ajax对象,IE6则使用new ActiveXObject("Microsoft.XMLHTTP")
但是jQuery源码中却没有对IE7的初始化方法进行兼容,而官网上的兼容说明是IE6+。
难道是我理解错误,还是其他的什么?希望大家给点意见,jQuery很好用,但是我不能要求客户必须用IE6,而放弃IE7啊!
最后多一句:
prototype最新版1.6.1也是同样的问题IE7下的Ajax.Request是没有作用的,需要将源码的1130行左右的
var Ajax = { 
getTransport: function() { 
return Try.these( 
function() {return new XMLHttpRequest()}, 
function() {return new ActiveXObject('Msxml2.XMLHTTP')}, 
//function() {return new ActiveXObject('Msxml2.XMLHTTP.4.0')}, 
function() {return new ActiveXObject('Microsoft.XMLHTTP')} 
) || false; 
},

进行修改,注释的那个部分是需要添加的修改。
这样才可以在IE7下使用这个ajax请求方法。
可是大家粗略的看一下,这里面的ajax初始化是先使用new XMLHttpRequest()创建,那就是说,
如果我不修改的话IE7应该也是可以的。
注:最后这个多一句的IE7兼容办法是在网络上搜索到的
以上就是我今天研究的结果,弄的我很糊涂,到底这个IE6、IE7和IE8全面兼容的jQuery的到底怎么实现(不能影响FireFox等等哦)
如果结论是:
由此可见IE7中需要使用new XMLHttpRequest()初始化ajax对象,IE6则使用new ActiveXObject("Microsoft.XMLHTTP")
那么prototype中的又怎么解释?
我已经糊涂了,希望大家指点一二!
刚才又搜索了一下关于XMLHttpRequest的创建方法,最后将源码修改为
return window.XMLHttpRequest? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
则IE6\7\8和FF都可以运行了。
总算是解决了。
Javascript 相关文章推荐
Javascript 篱式条件判断
Aug 22 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
浅谈jQuery为哪般去掉了浏览器检测
Aug 29 Javascript
JS实现点击链接切换显示隐藏内容的方法
Oct 19 Javascript
webpack项目轻松混用css module的方法
Jun 12 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
electron实现静默打印的示例代码
Aug 12 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 Javascript
element中的$confirm的使用
Apr 26 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
jQuery 白痴级入门教程
Nov 11 #Javascript
Javascript 解疑
Nov 11 #Javascript
不一样的文字闪烁 轮番闪烁
Nov 11 #Javascript
jquery 输入框数字限制插件
Nov 10 #Javascript
通过隐藏option实现select的联动效果
Nov 10 #Javascript
Riot.js 快速的JavaScript单元测试框架
Nov 09 #Javascript
asp.net HttpHandler实现图片防盗链
Nov 09 #Javascript
You might like
PHP操作MySQL事务实例
2014/11/05 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
PHP模板解析类实例
2015/07/09 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Python字符串格式化输出方法分析
2016/04/13 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
用python做游戏的细节详解
2019/06/25 Python
python中可以声明变量类型吗
2020/06/18 Python
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
C++面试题目
2013/06/25 面试题
本科生学习总结的自我评价
2013/10/02 职场文书
大课间活动制度
2014/01/18 职场文书
创先争优制度
2014/01/21 职场文书
宣传策划类求职信范文
2014/01/31 职场文书
讲座主持词
2014/03/20 职场文书
中介业务员岗位职责
2014/04/09 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
2016年元旦寄语
2015/08/17 职场文书
公司转让协议书
2016/03/19 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
mysql 索引合并的使用
2021/08/30 MySQL