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