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 相关文章推荐
jquery中ajax学习笔记4
Oct 16 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
Vue-resource实现ajax请求和跨域请求示例
Feb 23 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
JS实现自定义弹窗功能
Aug 08 Javascript
vue.js中toast用法及使用toast弹框的实例代码
Aug 27 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
小程序自定义轮播图圆点组件
Jun 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
一个分页的论坛
2006/10/09 PHP
php中函数的形参与实参的问题说明
2010/09/01 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
img标签中onerror用法
2009/08/13 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
js Calender控件使用详解
2015/01/05 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
远程调用的原理
2014/07/05 面试题
大学生求职简历的自我评价
2013/10/21 职场文书
成教自我鉴定
2013/10/27 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
2015年服务员工作总结
2015/04/08 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
MySQL七大JOIN的具体使用
2022/02/28 MySQL