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实际应用:innerHTMl和确认提示的使用
Jun 22 Javascript
javascript Object与Function使用
Jan 11 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
jquery实现弹出层效果实例
May 19 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
Oct 08 Javascript
深入理解jQuery.data() 的实现方式
Nov 30 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
vue如何通过id从列表页跳转到对应的详情页
May 01 Javascript
javascript面向对象创建对象的方式小结
Jul 29 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
Vue实现开关按钮拖拽效果
Sep 22 Javascript
微信小程序实现选项卡滑动切换
Oct 22 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程序之die调试法 快速解决错误
2009/09/17 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php上传大文件设置方法
2016/04/14 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
React Form组件的实现封装杂谈
2018/05/07 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
详解jquery和vue对比
2019/04/16 jQuery
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
django批量导入xml数据
2016/10/16 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
database面试题
2013/03/28 面试题
模具专业推荐信
2013/10/30 职场文书
家长评语和期望
2014/02/10 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
MySQL创建管理KEY分区
2022/04/13 MySQL