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 相关文章推荐
js 异步处理进度条
Apr 01 Javascript
javascript 触发HTML元素绑定的函数
Sep 11 Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 Javascript
jquery 实现回车登录详解及实例代码
Oct 23 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
Dec 30 Javascript
node和vue实现商城用户地址模块
Dec 05 Javascript
你不可不知的Vue.js列表渲染详解
Oct 01 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
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
Vue异步加载about组件
2017/10/31 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
python的id()函数解密过程
2012/12/25 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
python中的字典操作及字典函数
2018/01/03 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
利用python 读写csv文件
2020/09/10 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
一道SQL面试题
2012/12/31 面试题
入党自我鉴定范文
2013/10/04 职场文书
给儿子的表扬信
2014/01/15 职场文书
毕业生工作求职信
2014/06/30 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
导航工程专业自荐信
2014/09/02 职场文书
生活小常识广播稿
2014/09/16 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python