在做web开发是,大多时候都会使用FireFox作为调试的浏览器。上面携带的FireBug用来调试JavaScript实在是太方便了,绝大多数的问题都能够通过它跟踪调试出来。但是,当项目发布时,不能仅在这一款浏览器是运行正常就算正常了。还要做浏览器的兼容性测试。说到IE,相信很多人都会很头疼。这段时间就碰到了问题,使用Ajax去后台请求数据,在前台更新显示。开发阶段,在FireFox上一切正常。但到了测试阶段,在IE上,这个小小的功能却怎么也没法正常运行。好在,之前有所耳闻IE的这个“亮点”,于是顺着这个路子去修改代码,果然又恢复正常了。

首先说明一下IE的这个“亮点”,IE有个缓存机制,对请求的url进行判断,发现短时间内请求的url相同,则使用缓存的数据,而不是去重新向服务器获取一次数据。数据缓存也有好处,但对于需要经常去后台获取数据更新的需求来说,这就是个麻烦了。那怎么解决这个问题呢?既然是对相同的url认为是重复请求,那我就想办法每次请求的url值都不相同,同时还保证是我要的数据。我们采用在url中增加一个无用的参数,且这个参数每次都在变(时间!)。

这里举个简单的例子,从后台获取实时时间。普通的做法如下,此时在chrome、FireFox上不停的向后台请求获取实时数据,会发现页面上的时间会不停的改变。但换到IE浏览器下,第一次点击时间会出现,当不断重复点击时,时间仍旧停留在第一次获取到的时间上。

  function ajaxUrlOld() {
var xmlHttp = new XMLHttpRequest(); xmlHttp.open("get", "Handler.ashx?method=GetDateTime"); xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var strJson = xmlHttp.responseText;
document.getElementById('dataP').innerHTML = strJson;
}
}
xmlHttp.send(null);
}

对以上代码进行如下的修改,则可以解决掉该问题。这时候,在IE下也能获取到实时的时间了。

 function ajaxUrlNew() {
var xmlHttp = new XMLHttpRequest();
var url = "Handler.ashx?method=GetDateTime&datetime=" +new Date().getTime(); //url后面加点变化的东西
xmlHttp.open("get", url); xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var strJson = xmlHttp.responseText;
document.getElementById('dataP').innerHTML = strJson;
}
}
xmlHttp.send(null);
}

以简单的例子说明问题,真想获取时间,JS直接实现了,没必要向后台请求。另外,URL后面加的东西,不一定是时间,也可以用随机数生成器。只要保证两次请求的内容不相同即可。

解决IE下Ajax请求无效的更多相关文章

  1. 解决.NET Core Ajax请求后台传送参数过大请求失败问题

    解决.NET Core Ajax请求后台传送参数过大请求失败问题 今天在项目上遇到一个坑, 在.Net Core中通过ajax向mvc的controller传递对象时,控制器(controller)的 ...

  2. springmvc框架下ajax请求传参数中文乱码解决

    springmvc框架下jsp界面通过ajax请求后台数据,传递中文参数到后台显示乱码 解决方法:js代码 运用encodeURI处理两次 /* *掩码处理 */ function maskWord( ...

  3. ie 浏览器下ajax请求来自缓存的解决方法

    如上图所示,在ie浏览器下发出的请求,如何缓存中已经出现过这条请求记录,则不会请求服务端数据,解决方法是在请求后增加一个随机数,使每次请求都不同*可以添加当前时间戳 url+'?t='+Date.no ...

  4. 关于解决JQuery发送Ajax请求后,IE缓存数据不更新的问题

    http://www.cnblogs.com/lys_013/archive/2013/08/07/3243435.html 今天在做ajax页面无刷新请求后台服务器数据的时候,IE下遭遇Ajax缓存 ...

  5. SpringMVC 03: 请求和响应的乱码解决 + SpringMVC响应Ajax请求

    请求或响应的中文乱码问题 tomcat9解决了get请求和响应的中文乱码问题,但是没有解决post请求或响应的中文乱码问题 tomcat10解决了get和post请求以及响应的中文乱码问题 考虑到实际 ...

  6. SpringMVC下Ajax请求的方法,@Responsebody如果返回的是布尔值,ajax不会接到任何回传数据

    SpringMVC框架下,如果用ajax向后台请求得方法如果使用@Responsebody返回布尔值的话,ajax得不到任何的回传数据. 但是如果返回String类型,就是正常的. 测试了下代码写得没 ...

  7. [JS] IE下ajax请求不生效或者请求结果不更新

    问题描述: IE8及以下版本里用jQuery发简单的GET时,第一次或者新开窗口后的请求没问题,可以正确返回结果.但是之后刷新页面或者触发某些操作得到的ajax请求结果永远和第一次一样. 问题分析: ...

  8. Tomcat下ajax请求路径总结

    ajax的url有两种,一种是绝对路径,另一种是相对路径.   一.绝对路径:包括协议名称.主机地址.端口.web项目名称等的完整请求路径. 例如: $.ajax({     url:"ht ...

  9. IE8下ajax请求失败的解决方案

    今天发现IE9以下的浏览器,ajax请求返回数据异常研究半天发现是type参数未设置,由于默认方式是Get,添加上type:“post”就恢复正常了

随机推荐

  1. HDU 4998 Rotate

    题意: n次旋转  每次平面绕ai点旋转pi弧度  问  最后状态相当于初始状态绕A点旋转P弧度  A和P是多少 思路: 如果初始X点的最后状态为X'点  则圆心一定在X和X'连线的垂直平分线上  那 ...

  2. 【Android】应用启动画面

    几乎所有的Android应用程序都会有一个启动画面,展示自己的LOGO,本版信息,或者更人性化一点的,在很长的加载信息中,变换一些显示的文字等,让无聊的等待时间添加点调味剂. 具体实现来说,应该创建一 ...

  3. html网页特殊符号代码

    HTML特殊字符编码大全:往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字.下面就是以字母或数字表示的特殊符号大全.                   ...

  4. Java乔晓松-android中上传图片到服务器Tomcat(Struts2)

    在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片 android客户端上传图片部分的代码如下: package com.exampl ...

  5. Android.mk参数解释

    -------------------- 下面对Android.mk 中经常出现的变量进行讲解 -------------------- 这些变量,你会经常在Android.mk文件中见到,下面以字表 ...

  6. 神马是AB測试?

    手机响起了短信提示音,桂芬拿起手机,滑动解锁,看到是来福的短信,心里不禁一阵小鹿乱撞.     "喜欢看<冰封重生之门>吗?"     如此充满暗示意味的短信让桂芬激动 ...

  7. Git显示漂亮日志的小技巧

    Git的传统log如下所示,你喜欢吗? 看看下面这个你喜不喜欢?(点击图片看大图) 要做到这样,命令行如下: 1 git log --graph --pretty=format:'%Cred%h%Cr ...

  8. decimal ? 含义

    例如:   decimal ? je = zfje;   意思是  将 JE赋值为  ZFJE ,  并且允许  JE 为 NULL 值 这时JE为引用类型

  9. c++日历改进版

    #include<iostream> # include<fstream> #include<time.h> #include<string> #inc ...

  10. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...