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+css 图片自动缩放自适应大小
Aug 08 Javascript
删除节点的jquery代码
Jan 13 Javascript
js操作iframe父子窗体示例
May 22 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
jquery实现转盘抽奖功能
Jan 06 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
Dec 09 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
JS继承实现方法及优缺点详解
Sep 02 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的ob_start() 控制您的浏览器cache
2009/08/03 PHP
PHP 5.3.0 安装分析心得
2009/08/07 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
tensorflow更改变量的值实例
2018/07/30 Python
Python实现网站表单提交和模板
2019/01/15 Python
Django后台admin的使用详解
2019/07/08 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
铭立家具面试题
2012/12/06 面试题
技能竞赛活动方案
2014/02/21 职场文书
投资合作协议书
2014/04/17 职场文书
家长建议怎么写
2014/05/15 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
学生逃课检讨书
2015/02/17 职场文书
工程部岗位职责范本
2015/04/11 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书