Chrome 下,重复使用 XMLHttpRequest进行Post数据时,遇到一个奇怪的问题

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();

名品推荐:棉适 宾莱雅

上一篇:PCD文件格式详解及在PCL下读取PCD文件


下一篇:Python3 之选课系统