Jquery在IE7下无法使用 $.ajax解决方法

2016-02-19 14:37 93 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Jquery在IE7下无法使用 $.ajax解决方法吧。

【 tulaoshi.com - Web开发 】

通过查看源码发现
代码如下:
// 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"
titleInsert 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();
则IE678和FF都可以运行了。
总算是解决了。

来源:https://www.tulaoshi.com/n/20160219/1607356.html

延伸阅读
标签: Web开发
使用jquery 的ajax功能调用一个页面,却发现总是出现错误。 js代码如下 代码如下: $.ajax({ type: 'post', url: 'TestData.aspx', data: { language_type: 'cn'}, dataType: 'json', success: function (data) { alert('ok'); }, error: function (data) { alert('err'); }); } TestData.aspx代码如下,省略了后边一些代码 ...
标签: Web开发
老家的电脑是IE7浏览器,回来一瞅自己的博客,顶部,图形导航链接全部失效。 回想在网上看过的一篇文档,大意就是,如果在IE7中使用position:relative属性,需要在该元素的容器上,同时给予position:relative属性。 我给了。大按钮上的链接都恢复了。但是css"js"seo3个小按钮上没有链接。很诡异 又给了z-index属性,这下firefox...
标签: 电脑入门
不少Win7用户反映玩CF不能全屏,在CF游戏设置里的全屏的勾打不上去,如何解决Win7下玩CF无法全屏呢,其实Win7下玩CF无法全屏是正常现象,有些游戏本身并没有提供宽屏分辨率支持。其图形界面都是按照一定比例(如 4:3)来设计的,在宽屏显示器上就会在两边留有黑边从而保持图形的长宽比例正常。下面笔者提供两种方法来解决解决Win7下玩CF无法全...
标签: 浏览器
IE9无法播放Flash解决方法 很多人会遇到关于InternetExplorer9上Flash内容无法播放的问题。网页会弹出升级Flash插件的提示;而升级Flash插件后刷新页面却仍然弹出之前的升级提示。 教程首先,我们先检查一下Flash插件(ShockwaveFlashObject)是否被禁用了。 在IE9页面右上角单击 按钮,打开管理加载项。 查看一下S...
标签: Web开发
代码如下: $.ajax( { type: "POST", url: "/MemberComment.aspx/GetOrderToBeCommentCount", success: function(result) { //ToDo: } ) 使用时JS也没有报错。这个是我最郁闷的事了。不知道哪错。。 5分钟。。。10分钟。。。。20分钟。。。。。 从c#代码到浏览器一个个排查问题发现都OK。 最后问题的原因是改为如下就OK,少了2...

经验教程

261

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部