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 web对话框与弹出窗口
Feb 22 Javascript
DOM下的节点属性和操作小结
May 14 Javascript
javascript面向对象入门基础详细介绍
Sep 05 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
jQuery中even选择器的定义和用法
Dec 23 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
微信小程序如何调用json数据接口并解析
Jun 29 Javascript
Ajax异步刷新功能及简单案例
Nov 20 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新手上路(五)
2006/10/09 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
深入理解PHP中的count函数
2016/05/31 PHP
js表数据排序 sort table data
2009/02/18 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python获取时间戳代码实例
2019/09/24 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
python super()函数的基本使用
2020/09/10 Python
python压包的概念及实例详解
2021/02/17 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
户外活动总结范文
2014/04/30 职场文书
网络营销策划方案
2014/06/04 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
法律服务所工作总结
2015/08/10 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技