Firefox下的AJAX onreadystatechange与IE的不同。

SJY发表于:2016年10月25日 14:27 • 阅读:

先看代码:

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

这样一行。

欢迎转载,但请保留原文地址 http://www.sjyhome.com/javascript/js-firefox-ajax-onreadystatechange-ie.html

标签: Firefox AJAX

回复(0)