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翻页效果
Jul 23 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
brook javascript框架介绍
Oct 10 Javascript
由Javascript实现的页面日历
Nov 04 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
Jan 24 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
一个简单的JavaScript Map实例(分享)
Aug 03 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
JS实现购物车特效
Feb 02 Javascript
BootStrap的双日历时间控件使用
Jul 25 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 25 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连接Access数据库的注意事项
2016/08/12 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
python DataFrame 修改列的顺序实例
2018/04/10 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python使用thrift教程的方法示例
2019/03/21 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
开业主持词
2014/03/21 职场文书
会计学专业自荐信
2014/06/25 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL