关于ajax的async问题

关于ajax的async为true和false的问题,这里做一测试的例子:

function testAjax(){
        var url = "/Test/test/testServlet";
        var te = "aaa";
        jQuery.ajax({
            url: url,
            type: "GET",
            data: {},
            async:true,
            dataType: "json",
            success:function(data){
                te += "bbb";
            },
            error:function(e, jqXHR, textStatus, errorThrown){
            }            
        })
        te += "ccc";
    alert(123);
return te; } function test(){ var t = testAjax(); alert(t); }

当设为true时,则请求和当前js"主过程(我也不知道在js里边叫什么,暂时这么叫吧)"异步,即"各做各的",经过测试,最后test()方法会得到aaacccbbb,因为请求需要一定的时间,所以te先加'ccc',待ajax请求完成后,te再加上'bbb';而如果把alter(123)放到te+="ccc"之前,当执行到alert(123)时,代码等待人去点击确认alert信息(通常本地请求的速度都会比我们手动点一下alert()快些,即当我们点了alert之后,请求已经完成,te已经是'aaabbb‘),然后加上'ccc'即得到'aaabbbccc';

当设为false时,请求不进行异步处理,则此时,代码的运行顺序就会先完成请求之后,然后再向下执行,则此时就可以固定为一种情况('aaabbbccc');

这里加入了一个alert(123);目的在于让"主线程"等待请求的完成,以便看到"主线程"在异步为真的时候,确实先向下执行,通过人为的方式,来展现异步处理的两种情况;此处,还有一点启示:那就是个结果为不管怎么样,都会包含'bbb','ccc'即一定是等到主过程和请求过程都完成之后,才返回的,当然这只是一个推断,没有充足的理由,还请阁下指点一二;

如有不对之处,还请多多指正;

 

 

 

posted @ 2013-06-07 16:36  roilat  阅读(190)  评论(0编辑  收藏  举报