• 关于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'即一定是等到主过程和请求过程都完成之后,才返回的,当然这只是一个推断,没有充足的理由,还请阁下指点一二;

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

  • 相关阅读:
    Java设计模式概述之结构型模式(装饰器模式)
    Java设计模式概述之结构型模式(代理模式)
    Java设计模式概述之结构型模式(适配器模式)
    Java设计模式概述之创建型模式
    小诀窍
    iframe的一种应用场景
    linux网络
    ANT
    Eclipse使用
    mac 安装tomcat
  • 原文地址:https://www.cnblogs.com/roilat/p/3124109.html
Copyright © 2020-2023  润新知