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 简单抽屉效果的实现代码
Mar 09 Javascript
使用jquery插件实现图片延迟加载技术详细说明
Mar 12 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
javascript页面加载完执行事件代码
Feb 11 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
简介JavaScript中Boolean.toSource()方法的使用
Jun 05 Javascript
js实现纯前端的图片预览
Apr 27 Javascript
详解微信小程序 页面跳转 传递参数
Dec 08 Javascript
微信小程序实现折叠与展开文章功能
Jun 12 Javascript
关于JavaScript中高阶函数的魅力详解
Sep 07 Javascript
在小程序中推送模板消息的实现方法
Jul 22 Javascript
在pycharm中开发vue的方法步骤
Mar 04 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 foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
简单学习Python time模块
2016/04/29 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
使用python模拟高斯分布例子
2019/12/09 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
自我评价正确写法范文
2013/12/10 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
元旦晚会开场白
2015/05/29 职场文书
画展观后感
2015/06/17 职场文书
小学班主任心得体会
2016/01/07 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang