换一种思路:解决Ajax程序与IE7不兼容的问题

解决在IE7下无法使用$.ajax的方法 在上面的代码中,我们将请求的URL作为第一个参数传递给$.getJSON方法。在done、fail和always回调函数中,我们可以执行相应的操作,以便在请求完成时进行处理。在使用jQuery的$.ajax方法时,有时会遇到在IE7浏览器下无法正常工作的问题。本文将介绍一种解决这个问题的方法,并提供相应的源代码示例。如果你需要处理其他类型的数据,可以考虑使用其他适当的方法,如。.ajax方法,专门用于处理返回JSON格式数据的异步请求。.ajax的问题,并正常处理异步请求。方法,我们可以解决在。 阅读详情
http://www.netpu.net
网普科技版权所有,转载请注明作者和出处并保持文章原貌
(网普科技优质廉价美国主机、美国LINUX虚拟主机服务)

原文地址
http://bbs.netpu.net/viewthread.php?tid=3138

问题提出

    最近计划重构网普科技的网站,小试牛刀一下,用PHP+XAjax实现了一个功能简单的小页面( http://www.netpu.net/test/test.php)。不曾想这个页面在Firfox中测试一直很正常,到IE7下测试则时而正常,时而出错。打开XAjax的Debug功能,也没能获取有价值的信息,非常郁闷。

    于是使用Ajax+IE7作为关键字,到搜索引擎中去搜索,找到很多关于Ajax代码在IE7下运行出错的帖子,但都是有人发问无人回答,看来只好自己去解决啦。

解决思路

    既然这个页面在Firefox和IE6上都运行正常,那么我们来看看Firefox与IE6、IE7在处理Ajax代码时都有哪些区别吧?

    我们知道,Ajax 应用程序的核心是XMLHttpRequest,但是由于不同浏览器的兼容问题,创建这个对象的方法是有很大的区别的。

    在Mozilla、Firefox、Safari、Opera等浏览器上,使用下边的语句创建XMLHttpRequest:
CODE:   [Copy to clipboard]
    var xmlHttp = new XMLHttpRequest();
   
而在IE6及以下版本,则使用以下语句创建XMLHttpRequest:
CODE:   [Copy to clipboard]
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 或
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
   
那IE7又与IE6有些什么区别呢?
    在MSDN上:About Native XMLHTTP一文中里边有这样的说明:
    http://msdn2.microsoft.com/en-us/library/ms537505.aspx

    In Internet Explorer 6 and earlier, XMLHTTP was implemented as an ActiveX object provided by Microsoft XML (MSXML). Beginning with Internet Explorer 7, XMLHTTP is also exposed as a native scripting object.
    也就是说IE7增加了Native XMLHTTP支持。

    同时里边给了一段示例代码:
CODE:   [Copy to clipboard]
    var xmlHttp = null;
    if (window.XMLHttpRequest) {
      // If IE7, Mozilla, Safari, and so on: Use native object.
      xmlHttp = new XMLHttpRequest();
    }
    else
    {
      if (window.ActiveXObject) {
         // ...otherwise, use the ActiveX control for IE5.x and IE6.
         xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.3.0');
      }
    }
   
由此可以看出,IE7比IE6多了Native XMLHTTP支持。那么会不会是这个Native XMLHTTP导致的问题呢?不用这个Native XMLHTTP会怎么样?还好IE7的设计者也考虑了这一点,IE7提供了两个功能:
    一个是通过设置来禁用“Native XMLHTTP支持”(默认是打开)。
   
    挑掉Enable Native XMLHTTP support上的勾就可以禁用它了。

    另外一个功能就是兼容IE6创建XMLHttpRequest的方法。

解决方法

    OK,既然这样,我们禁用“Native XMLHTTP支持”,看看我们的程序是否正常了?
    测试结果,我们的程序一切正常。

    但是等等,我们总不能要求用户访问我们的页面之前禁用“Native XMLHTTP支持”吧?汗一下!

    于是我们只能在Ajax的XMLHttpRequest创建代码上想办法了。
    想什么办法呢?说实话,对Ajax我是超级外行,没办法,硬着头皮来吧。既然问题出在创建XMLHttpRequest对象上,那么我们就从这里下手吧。

    网上很多文章都强调,为了跨浏览器兼容,首先检查是否支持Native XMLHTTP。
    比如这篇文章:Ajax on IE 7: Check native first
    http://ajaxian.com/archives/ajax-on-ie-7-check-native-first

    还有前文提到的IE7创建XMLHttpRequest的示例代码,也是先检查是否支持Native XMLHTTP的。看看我们用的XAjax是咋创建对象的吧。
CODE:   [Copy to clipboard]
    /*
            Function: getRequestObject
       
        Construct an XMLHttpRequest object dependent on the capabilities
        of the browser.
       
        Returns:
       
        object - Javascript XHR object.
    */
    if ("undefined" != typeof XMLHttpRequest) {
        xajax.tools.getRequestObject = function() {
                return new XMLHttpRequest();
        }
    } else if ("undefined" != typeof ActiveXObject) {
        xajax.tools.getRequestObject = function() {
                try {
                        return new ActiveXObject("Msxml2.XMLHTTP.4.0");
                } catch (e) {
                        xajax.tools.getRequestObject = function() {
                                try {
                                        return new ActiveXObject("Msxml2.XMLHTTP");
                                } catch (e2) {
                                        xajax.tools.getRequestObject = function() {
                                                return new ActiveXObject("Microsoft.XMLHTTP");
                                        }
                                        return xajax.tools.getRequestObject();
                                }
                        }
                        return xajax.tools.getRequestObject();
                }
        }
    } else if (window.createRequest) {
        xajax.tools.getRequestObject = function() {
                return window.createRequest();
        }
    } else {
        xajax.tools.getRequestObject = function() {
                throw { name: 'GetRequestObject', message: 'XMLHttpRequest is not available, xajax is disabled' }
        }
    }
   
果然不出我们预料,也是先检查是否支持Native XMLHTTP的。这样一来一旦使用的是IE7,那么IE7的Native XMLHTTP会被启用,我们的程序就会出错啦。

    换个策略,我们如果先检查ActiveX object对象呢?说做就做,我们修改了这部分代码(简单地说就是调换了一下顺序),测试,一切正常,Firefox、IE6、IE7都正常(抱歉我手头只有这几个浏览器。

    至此大功告成!您问我修改后的代码呢?这个留给大家做个小练习吧,超级简单哦。或者您可以到网普技术论坛(http://bbs.netpu.net)来寻求帮助。

    本文地址为: http://bbs.netpu.net/viewthread.php?tid=3138

总结一下

    也许是XAjax对IE7的Native XMLHTTP支持不好,也许是我们对XAjax的使用有问题,也许真的是IE7的Native XMLHTTP有BUG,不管怎么说,我们换一个角度换一个方法解决了这个问题,也加深了我们对Ajax技术的理解。至于XAjax或者IE7何时解决这 个问题,我们拭目以待!

    另外本人初学Ajax,错漏之处在所难免,希望大家不吝赐教。

http://www.netpu.net
网普科技版权所有,转载请注明作者和出处并保持文章原貌
(网普科技优质廉价美国主机、美国LINUX虚拟主机服务)
【OpenCV】手眼标定实战:从原理到calibrateHandEye的完整实现 本文详细解析了机器人视觉中的手眼标定原理与实战,重点介绍了如何使用OpenCV的calibrateHandEye函数实现从数据采集到结果验证的完整流程。文章深入剖析了AX=XB核心方程,区分了眼在手上与眼在手外两种配置,并提供了详细的代码示例与避坑指南,帮助开发者精准建立相机与机械臂末端的坐标转换关系,是机器人精准抓取的关键技术。 阅读详情

相关推荐

串并装换器的设计及仿真结果

串/并转换是高速数据流处理的重要技巧之一。串/并转换的实现方法多种多样,根据数据的的顺序和数量要求,可以选用寄存器,双扣RAM,SRAM,FIFO,等实现。对于 数量比较小的设计可以采用移位寄存器完成串/并转换。       在工程中,如何体现串/并转换的设计思想呢? 怎样才能提高系统的处理速度呢 ?       一个简单的串/并转换框架如下图所示,串行输入的数据通过FPGA内部的 n 个移

stubben_bear的专栏 2273

IE7中使用AJAX遇到的一个问题

        最近在做网站的时候用到了一个大文件上传的功能,也就是说通过INPUT 的文件上传表单元素,支持上传任意大小字节的文件,同时在浏览器上显示上传进度。服务端就是利用HttpWorkRequest类,同网上其它大文件上传的原理是一样的。        客户端是在调用form的submit方法之后,再用AJAX方式从服务器上取得当前上传的进度信息,这种方式在IE6和FF下都没有问题。因

bindsang的专栏 1955

单细胞分析实战:当Seurat的SCTransform遇上Harmony,我的整合流程优化笔记

本文详细介绍了单细胞转录组数据分析中SCTransform与Harmony整合流程的优化策略。通过实战案例展示如何调整SCTransform参数、优化Harmony整合效果,并解决常见问题,帮助研究者获得更可靠的生物学发现。特别适合需要处理批次效应的单细胞数据分析人员。

weixin_42552716的博客 358

ajax请求在ie浏览器上的兼容性问题

本人在服务器上调试程序 发现ajax请求在 谷歌浏览器和火狐浏览器 调试着都没有问题 但在ie上就出现了问题,这里我就把碰见的问题以及最后怎么解决的 分享一下 第一次 运行的时候 就报错了 我打开控制台发现了问题 ie浏览器一直报我这里缺少函数 我查了下 原来 ie不支持 这种写法 所以 我就用原生了 dom方法 document.getElementById()获取元素 用...

业余前端的职业经历 2611

Palantir的本体论建模跟数仓建模的异同

Palantir的Foundry Ontology通过构建组织的数字孪生体,将数据集和模型映射为对象类型、属性、链接和操作类型,形成完整的语义知识网络。与传统数仓建模相比,本体建模以业务问题为驱动,强调细粒度语义和实时决策能力,采用图语义技术实现灵活的映射关系。

轩哥的个人研究和成长记录 1596

基于STM32的智能水温控制系统设计

智能水温控制系统广泛应用于家庭、工业、农业等多个场景,尤其在热水器、恒温泳池和地暖系统中,通过实时监测和调节水温,提高设备的效率和用户的舒适度。本文基于STM32微控制器设计了一个智能水温控制系统,能够实时监测水温、用户设置温度,并根据需要控制加热器或冷却装置,确保水温维持在设定范围内。系统能够根据用户设定自动控制加热和冷却设备,确保水温维持在舒适的范围内,并通过OLED屏实时显示水温信息。在生成的项目基础上,编写水温监测、目标温度设定、加热器和冷却装置控制、OLED数据显示以及超温报警的代码。

2401_88410555的博客 2475

Ajax程序与IE7不兼容的问题

  原文地址http://bbs.netpu.net/viewthread.php?tid=3138问题提出    用JSP+XAjax实现了一个功能简单的小页面。不曾想这个页面在Firfox中测试一直很正常,到IE7下测试则时而正常,时而出错。打开XAjax的Debug功能,也没能获取有价值的信息,非常郁闷。    于是使用Ajax+IE7作为关键字,到搜索引擎中去搜索,找到很多关于Ajax代码

lw-e-gov-dept2的专栏 524

NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案(附详细排查流程)

本文深入探讨了NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案,包括快速临时修复、标准系统配置和PAM模块根治方案。详细分析了错误原因,提供了完整的排查流程和性能优化建议,帮助开发者高效解决RDMA网络环境下的内存锁定问题。

nut55的博客 625

ajax的IE缓存问题

文章目录结果的产生ajax解决缓存问题 结果的产生 IE 缓存问题,IE浏览器会将ajax请求的返回结果进行缓存,如果再遇到相同的ajax请求,就直接在缓存中取结果,这样就得不到最新的服务器响应结果。 (chrom浏览器可以实时更新) eg: server.js // 1.引入express const express = require('express'); // 2.创建应用对象 const app = express(); // 3.创建路由规则 // 如果请求行的路径是/server的GET请求就

mantou_riji的博客 420

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

YOLOv8改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用

本文记录的是利用双级路由注意力机制优化的目标检测网络模型。传统的复杂度高,随着输入空间分辨率增加,计算量呈平方增长,导致严重的可扩展性问题。而本文所使用的在获取全局信息的同时,通过区域到区域路由和令牌到令牌注意力的合理设计,减少了不必要的计算量。BiFormer: Vision Transformer with Bi-Level Routing Attention采用四阶段金字塔结构,与一些先进的视觉Transformer类似。在每个阶段,首先使用重叠的补丁嵌入(在第一阶段)或补丁合并模块(在第二到第四阶段

Limiiiing的博客 614

ie ajax十分卡,解决jquery .ajax 在IE下卡死问题的解决方法

解决jquery .ajax 在IE下卡死问题的解决方法解决IE编码问题第一步:dataType:($.browser.msie) ? "text" : "xml" 先这样做让IE 识别返回的是text 还是xml第二步:复制代码 代码如下:function parseXml(xml) { //XML IE编码问题第二步if (jQuery.browser.msie) { // 判断浏览器是不是I...

weixin_33268492的博客 517

无线充电Qi协议正向通信FSK的解调设计

常见的FSK解调方法是使用频率锁相环(PLL)来跟踪输入信号中的频率变化。PLL根据输入信号的频率变化来生成数字信号,从而实现FSK信号的解调。本文将详细介绍无线充电Qi协议正向通信FSK的解调设计,并提供相应的源代码。在上述示例代码中,我们首先定义了FSK解调的参数,包括采样率、载波频率、每个比特的持续时间和比特判定阈值。最后,通过比较滤波后的信号与比特判定阈值,我们将解调后的数字数据转换为0和1的序列。请注意,上述代码仅为示例,实际的解调设计可能需要根据具体的应用场景和系统要求进行调整和优化。

IunScala的博客 2444

解决$.ajax()在IE10以下失效的问题

一、问题重现 本地的脚本请求测试环境的接口 $.ajax({ url: ***, type: GET, data: data, success: function (data) { **** } }); 在chrome、Firefox和IE9以上的都正常发送请求,IE10以下没有发送请求。 二、解决思路 $.ajax()中把错误信息显示出来 ...

diaolanbeng0962的博客 328

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

两个问题:ie+ajax 和 ie+getElementsbyname

<br />原文地址:http://blog.thesharpmind.com/?p=11001<br /> <br /><br />第一个问题不能说是ie的错,只能说ie与其他浏览器的设计思路不同而已。ie追求的是大而全,ff和chrome更加具有开源软件的小而精的特点。在对于ajax的兼容上就可以看出来,ie希望代替开发者把xmlhttp请求的缓存工作给完成了,于是很多人写的ajax代码在ff可以正常运行而在ie就有问题。这主要就是ie的缓存在捣鬼。<br />解决办法有两个:<br /> <br />

gobattle的专栏 584

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

解决IE下jquery ajax无法获得最新数据的问题(IE缓存)

今天修改一个bug,利用ajax查询数据,在谷歌浏览器下可以获取到最新数据,而在IE中获得是旧数据,无法获得最新的数据,经查资料,才发现时IE缓存在作怪。 发现此ajax请求用的get方式,每次请求的URL一模一样,IE浏览器有个特殊的地方,如果每次请求的URL一样时,就会拿出缓存中已有的数据显示在页面上,并不会再次去查询数据库,所以每次显示的都是旧数据。 解决办法: 那就有思路了,我们可以

Bad Boy 3416

layer ui ajax 样式,layerUi与AJAX的一种思路

javascript:function rep(id) {layer.confirm("确定要拒绝此认证吗?", {btn: ["确定", "取消"]}, function () {var url = document.getElementById("repulse-url").value;$.ajax({type: "POST",url: url,data: { ids: id },dataTy...

weixin_36140400的博客 388

解决ajax跨域请求浏览器兼容问题

ajax 跨域 avalon.ajax

lilixingfu的专栏 3260

ie8ajax访问不能刷新,IE8里ajax访问无法刷新的处理思路

这次给大家带来IE8里ajax访问无法刷新的处理思路,处理IE8里ajax访问无法刷新的注意事项有哪些,下面就是实战案例,一起来看一下。AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。IE...

weixin_39776239的博客 369

IE浏览器下jquery的ajax方法失效解决办法

问题描述如下: 第一次使用ajax,可以正常获取数据;其他情况下,只能显示第一次的数据。 原因分析: IE对于同一次请求,只会发送一次请求。 解决思路: 在请求URL上加上随机参数。 url: appPath + 'modules/remind!get.action?r='+Math.random()

lisq037的专栏 3045

简单解决AJAX在IE中的缓存问题

方法2:用JavaScript在Ajax提交的时候加入一个随机数作为URL中的一个参数。req.open(url + "&" + Math.random).后来上网搜的解决方法,希望对大家有用.BLUEIDEA有个简单的法子解决这个问题,简单有效.    receiveReq.open("get","content.xml");    //当请求状态改变时调用handleReceiveChat方法

pi's Dad的博客 367
上一篇: HTTP状态码(HTTP Status codes)简介
下一篇: 技术FAQ:如何保证虚拟主机的安全
Netpu
博客等级 码龄22年 3粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值