在调用一个jquery的ajax方法时,我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,例如:
var i=0;//定义一个全局全量 $.get(url,function(data){ i=9; })//然后调用jquery的一个函数 alert(i);//得到的是0而不是9
data中的数据是异步获取的,在全局环境下的代码是在页面加载时就执行了,这时异步获取数据还没有完成,取不到值。
解决方法:
var i=0; $.ajax({ url:url, success:function(){ i=9; }, async:false }); alert(i);
或直接在$.get()前添加
$.ajaxSettings.async = false;
修改默认配置。
async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程和ajax块后面的脚本。
当然,如果设定为async:false就失去ajax异步的优点了,具体还需要视情况区别对待处理。
https://blog.csdn.net/Jation_/article/details/49357307
https://www.cnblogs.com/f-zp/p/4424633.html
https://www.jb51.net/article/45432.htm