在调用一个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

标签: jquery, WEB开发

发表评论