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

  • 相关阅读:
    SQL通配符
    全角半角内容转换
    使用merge into 来更新目标表的个别字段
    数据库分库分表思路
    impdp导入错误ORA-14460
    CentOS只有GNOME桌面,没有GNOME经典桌面
    sqlserver进行发布订阅时提示实例上未安装复制组件解决方法
    SQLSERVER发布订阅,超详细
    sqlserver查询锁以及解锁
    sqlserver调用java文件
  • 原文地址:https://www.cnblogs.com/personnel/p/4584885.html
Copyright © 2020-2023  润新知