zoukankan      html  css  js  c++  java
  • 火狐对ajax的onreadystatechange与IE的不同。

    先看代码:

    function test1()
    {
        if (xmlHttpRequest == null)
        {
            xmlHttpRequest = CreateXmlHttpRequest();
        }

        var url = “test.ashx”;  

      同步请求
        xmlHttpRequest.open("GET", url, false);
        xmlHttpRequest.onreadystatechange = suc; 
        xmlHttpRequest.send(null);

       alert(1);
    }

    function suc()
    {f (xmlHttpRequest.readyState == 4)
        {
            if (xmlHttpRequest.status == 200)
            {

        alert(2);

       }

    }
    }

    上面的代码在ie中会先后弹出2,1,但是在火狐中只会弹出2.

    原因是在火狐中,如果ajax基于同步请求,那么代码是顺序执行的,同时不会触发onreadystatechange事件。

    当执行xmlHttpRequest.send(null);这一句时,不会立即执行alert(1);直至xmlHttpRequest有返回结果。

    在ie中也是顺序执行的,但是当执行xmlHttpRequest.send(null);这一句时,会不断的触发onreadystatechange直到执行alert(2);才执行alert(1);

    如果把上面的代码改成:

    function test1()
    {
        if (xmlHttpRequest == null)
        {
            xmlHttpRequest = CreateXmlHttpRequest();
        }

        var url = “test.ashx”;  

      异步步请求
        xmlHttpRequest.open("GET", url, true);
        xmlHttpRequest.onreadystatechange = suc; 
        xmlHttpRequest.send(null);

       alert(1);
    }

    function suc()
    {f (xmlHttpRequest.readyState == 4)
        {
            if (xmlHttpRequest.status == 200)
            {

        alert(2);

       }

    }
    }

    此时在ie或者火狐中,会返回相同的结果。所以在jquery中存在  

        if ( !s.async ) {
                onreadystatechange();
            }

    这样一行。

  • 相关阅读:
    CentOS8安装Mysql5.7
    CentOS8搭建FTP服务器
    CentOS8安装jdk1.8
    基于可穿戴设备的医疗监护系统
    air530GPS数据通过air202上传阿里云
    bzoj2594: [Wc2006]水管局长数据加强版
    bzoj3091: 城市旅行
    Problem A. Array Factory XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016
    hdu5716
    bzoj2002: [Hnoi2010]Bounce 弹飞绵羊
  • 原文地址:https://www.cnblogs.com/lorgine/p/1858237.html
Copyright © 2011-2022 走看看