Chrome 下,重复使用 XMLHttpRequest进行Post数据时,遇到一个奇怪的问题
2024-09-14 02:15:50
var http_request; //在外面申明对象,主要为了在updatePage中使用
//无刷新更新内容
function post(url,parameter)
{
if(http_request==null)
{
http_request = getHttpRequest();
}
if (!http_request)
{
alert("XMLHttpRequest 初始化失败!");
}
else
{
//在url尾部加一个rnd随机数,这样就不会发生读取ie缓存
if(url.indexOf("?") > -1)
{
url = url + "&rnd=" + Math.random();
}
else
{
url = url + "?rnd=" + Math.random();
}
http_request.open("POST", url, false); //打开请求 //false 同步, true 异步
http_request.onreadystatechange = updatePage; //设置回调方法
http_request.setRequestHeader("Content-length", parameter.length);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(parameter); //发送请求
}
}
//回调方法
function updatePage()
{
if (http_request.readyState == 4)
{
if(http_request.status == 200)
{
alert("..."); //
}
}
}
测试发现,在chrome 26下,如果申明了一个公共的变量:http_request
然后多次重复使用XMLHttpRequest时,如果Post时,传递了参数(内容),那么会连续执行2次回调函数: updatePage()
如果Post时没有传参数(内容),只会执行1次回调函数: updatePage()
在firefox和ie下测试,只会执行1次回调函数: updatePage()
解决在chrome 26下遇到的这个问题,也很简单,每次使用http_request(XMLHttpRequest)时,都重新初始化一下:
http_request = getHttpRequest();
最新文章
- 表空间基于时间点的恢复(TSPITR)
- PostgreSql+PostGIS和uDig的安装
- i++ and ++i efficiency
- 泛型容器单元(Generics.Collections)[3]: TStack<;T>; 堆栈列表
- MagicalRecord的使用(第三方库实现的数据库)
- Ubuntu下vim的配置
- 为什么 API 监控对于任何业务来说都重要?
- java基础之抽象类与接口的区别
- U盘安装win7+CentOS7双系统
- ASPxGridView后台获取edit、delete、选择框等按钮。
- http协议与http代理
- jquery validate扩展验证方法
- 关于MongoDB安全事件的一些思考
- C#表达式目录树(Expression)
- 精读《C++ primer》学习笔记(第四至六章)
- Java基础学习-HelloWorld案例的编写和运行
- 什么是Spring Boot?
- Android原生(Native)C开发之四:SDL移植笔记
- JVM 内部原理(四)— 基本概念之 JVM 结构
- 那些年读过的书《Java并发编程实战》十、再探究Java内存模型