Jquery在IE7下无法使用$.ajax解决方法
2023-06-13 09:14:14 时间
通过查看源码发现
复制代码代码如下:
//Createtherequestobject;Microsoftfailedtoproperly
//implementtheXMLHttpRequestinIE7,soweusetheActiveXObjectwhenitisavailable
//ThisfunctioncanbeoverridenbycallingjQuery.ajaxSetup
xhr:function(){
returnwindow.ActiveXObject?newActiveXObject("Microsoft.XMLHTTP"):newXMLHttpRequest();
},
以下是这个jquery的源码的版本声明
/*
*jQueryJavaScriptLibraryv1.3.2
*http://jquery.com/
*
*Copyright(c)2009JohnResig
*DuallicensedundertheMITandGPLlicenses.
*http://docs.jquery.com/License
*
*Date:2009-02-1917:34:21-0500(Thu,19Feb2009)
*Revision:6246
*/
通过一个html打印“window.ActiveXObject”的结果可以知道IE6、IE7和IE8都是返回的true,
测试的html源码为(同一个目录下有一个名为index.jsp页面,内容无所谓。)
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>Inserttitlehere</title>
<scripttype="text/javascript"src="javascript/jquery.js"></script>
<scripttype="text/javascript">
$(function(){
$.ajax({
url:"index.jsp",
success:function(){alert("success")},
error:function(){alert("error")}
});
//$("div").append("<fontcolor="red">window.ActiveXObject:</font>");
//$("div").append((window.ActiveXObject?"true":"false"));
//alert(typeof(newXMLHttpRequest()));
//alert(typeof(newActiveXObject("Msxml2.XMLHTTP.4.0")));
//alert(typeof(newActiveXObject("Msxml2.XMLHTTP")));
//alert(typeof(newActiveXObject("Microsoft.XMLHTTP")));
});
</script>
</head>
<body>
<div></div>
</body>
</html>
情况一:
不修改源码,则IE6中可以弹出“success”的提示,而IE7却没有任何提示,连错误提示都没有。
情况二:
将源码中的
window.ActiveXObject?newActiveXObject("Microsoft.XMLHTTP"):newXMLHttpRequest();
修改为
window.ActiveXObject?newXMLHttpRequest():newXMLHttpRequest();
则IE7中是弹出“success”的提示,而IE6却提示js错误,详情大概为”XMLHttpRequest对象未定义“
两种情况下FireFox都可以正常提示“success”,版本是FireFox3.5.3,其他浏览器不知道。
由此可见IE7中需要使用newXMLHttpRequest()初始化ajax对象,IE6则使用newActiveXObject("Microsoft.XMLHTTP")
但是jQuery源码中却没有对IE7的初始化方法进行兼容,而官网上的兼容说明是IE6+。
难道是我理解错误,还是其他的什么?希望大家给点意见,jQuery很好用,但是我不能要求客户必须用IE6,而放弃IE7啊!
最后多一句:
prototype最新版1.6.1也是同样的问题IE7下的Ajax.Request是没有作用的,需要将源码的1130行左右的
varAjax={
getTransport:function(){
returnTry.these(
function(){returnnewXMLHttpRequest()},
function(){returnnewActiveXObject("Msxml2.XMLHTTP")},
//function(){returnnewActiveXObject("Msxml2.XMLHTTP.4.0")},
function(){returnnewActiveXObject("Microsoft.XMLHTTP")}
)||false;
},
进行修改,注释的那个部分是需要添加的修改。
这样才可以在IE7下使用这个ajax请求方法。
可是大家粗略的看一下,这里面的ajax初始化是先使用newXMLHttpRequest()创建,那就是说,
如果我不修改的话IE7应该也是可以的。
注:最后这个多一句的IE7兼容办法是在网络上搜索到的
以上就是我今天研究的结果,弄的我很糊涂,到底这个IE6、IE7和IE8全面兼容的jQuery的到底怎么实现(不能影响FireFox等等哦)
如果结论是:
由此可见IE7中需要使用newXMLHttpRequest()初始化ajax对象,IE6则使用newActiveXObject("Microsoft.XMLHTTP")
那么prototype中的又怎么解释?
我已经糊涂了,希望大家指点一二!
刚才又搜索了一下关于XMLHttpRequest的创建方法,最后将源码修改为
returnwindow.XMLHttpRequest?newXMLHttpRequest():window.ActiveXObject?newActiveXObject("Microsoft.XMLHTTP"):newXMLHttpRequest();
则IE6\7\8和FF都可以运行了。
总算是解决了。
相关文章
- javascript/jquery获取地址栏url参数的方法
- jQuery Ajax 实例 ($.ajax、$.post、$.get)详解编程语言
- jquery jssdk分享报错解决方法详解编程语言
- jquery鼠标点击穿透的解决方法详解编程语言
- jQuery html()和text()方法的区别
- jQuery prepend()和prependTo()方法
- jQuery $.ajax()方法的使用
- 传递参数的标准方法(jQuery.ajax)
- jQuery事件队列调整方法
- jquery$.ajax()取xml数据的小问题解决方法
- 在VS2008中使用jQuery智能感应的方法
- jquery获取下拉列表的值为null的解决方法
- jquery加载页面的方法(页面加载完成就执行)
- Jquery、Ajax、Struts2完成定时刷新的方法
- jquery自定义类似$.ajax()的方法实现代码
- jquery中获取id值方法小结
- jquery.Ajax()方法调用Asp.Net后台的方法解析
- jquery实现ajax提交form表单的方法总结
- 关于jQuery中的each方法(jQuery到底干了什么)
- Jquery图片延迟加载插件jquery.lazyload.js的使用方法
- 通过Jquery的Ajax方法读取将table转换为Json
- 浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
- jquery获取选中的文本和值的方法
- jquery通过ajax加载一段文本内容的方法
- jQuery+ajax实现动态执行脚本的方法