ajax success 方法内部不能给方法外部变量赋值的问题

zheyang
  • 147

图片描述

如上图,我加上了cache:false 和async:false ,但是最后获取到的level的值还是为空,请问是什么情况?

回复
阅读 8.1k
7 个回答

这个是jQuery的ajaxAPI本身这样设计的,当async为false的时候,意味着ajax请求为同步的,那么这个API就默认你是直接通过$.ajax()这个方法调用所返回的结果去取值,而不是通过success回调函数进行取值,所以也就不会调用success这个回调函数。
对于ajax同步和异步请求的区别,可以参考我之前回答过的问题:https://segmentfault.com/q/10...

返回defer对象不好么

个人认为对于ajax这种请求,应当采用回掉函数的形式返回

在执行 getLevel 的时候,发送了一个 Ajax 请求,然后执行return level,这个时候不论 ajax 是否已经成功,sucess 的回调函数都不会执行。因为,JS 是单线程的。所以 return level 返回空字符串(这个时候 level 还是初始值)。

当Ajax 成功了,就会给,level 赋值,但是这个时候你已经访问不到level

你所不懂的问题是:基本类型和引用类型的区别;JS 异步是什么意思。

建议先看下开发者工具,返回的代码是什么,有没有返回数据,有的话内容是什么。

把异步改写成同步请求就可以了赋值了

async : false,

异步得到的答案,在success方法里面使用就好了。

宣传栏