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

这样一行。

 

转载于:https://www.cnblogs.com/lorgine/archive/2010/10/22/1858237.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值