同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
2014-03-26 15:10
405 查看
同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始发现——onreadystatechange()事件再也没有被调用!于是上Google查了一下,发现还有不少人为此感到困扰,而且发现很多人持有的是这个错误的观点:
他们说这是因为一个XmlHttp只能使用一次send(),每次要使用新的XmlHttp。但是我的XmlHttp是函数内的局部变量,函数执行完毕它就会被销毁啊,而且即使我在函数的开头把它赋值null也没有用。
/*然后我发现一个十分有意义的帖子
*/
原来是这个原因,由于IE浏览器有缓存,第一次发送的Ajax请求确实被发送出去了,也接收到了回应,所以就触发了onreadystatechange()事件。但是从第二次起IE浏览器发现缓存里面已经有请求的页面,于是Ajax请求将不再被发送出去,这样当然也不会触发onreadystatechange()事件了。所以只要我们在Url里加上+"&"+Math.random()就可以避免这个问题。当我做了这样修改后果真就可以在同一页面多次使用XmlHttp发起Ajax请求了。接着我把xmlhttp
= null删除掉也仍然可以正常运行了。
附代码如下:
<script type="text/javascript">
function createXHR() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
if (window.ActiveXObject) {
var msxmls = ['MSXML3', 'MSXML2', 'Microsoft']
for (var i=0; i < msxmls.length; i++) {
try {
return new ActiveXObject(msxmls[i]+'.XMLHTTP')
} catch (e) { }
}
throw new Error("No XML component installed!")
}
}
</script>
<script type="text/javascript">
function refreshComment() {
var xmlhttp = createXHR();
var xmlhttpUrl = "flash.aspx?ajax=refresh&"+Math.random();
xmlhttp.open("GET", xmlhttpUrl, true);
xmlhttp.send(null);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
// alert("xmlhttp.status = " + xmlhttp.status);
// alert("xmlhttp.readyState = " + xmlhttp.readyState);
divCommentList.innerHTML=xmlhttp.responseText;
}
}
}
}
</script>
相关文章推荐
- [转载]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- 【Ajax】--同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- [转] 同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- [原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- 同一页面无法多次使用XmlHttp发起Ajax请求
- 解决同一页面无法多次使用XmlHttp发起Ajax的问题
- ajax请求php页面中生成的session,无法在其他普通php页面使用
- 在ASP.NET中使用IHttpHandler处理请求(如自实现AJAX)时,无法获得Session(或者说是Session 为 null)的原因及解决方法
- ajax请求到后台数据,前台不用拼接字符串append追加HTML标签,使用空模板一样显示到页面
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- 使用swiper 轮播插件ajax 请求加载图片时,无法滑动问题
- 刷新页面时无法自动执行AJAX请求的解决办法
- 小白使用react---ajax请求后的数据在另一个页面显示
- jQuery的Ajax请求数据时type无法使用GET
- ASP.NET一个页面请求被重复处理多次的原因记录。
- 关于springmvc的controller返回页面无法跳转,使用ajax
- 在iOS10系统中微信后退无法发起ajax请求的问题解决办法
- SERVER2008IIS服务器不能正常使用(由于扩展配置问题而无法提供您请求的页面,如果该页面是脚本...)
- 出现 JSP页面中使用JSTL标签无法解析 错误的原因及解决方法
- 【JQuery easyui】 $.modalDialog 内嵌的页面form表单发起ajax请求处理