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

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

返回defer对象不好么

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

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

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

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

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

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

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

  • 一个关于如何用js实现鼠标拖拽,旋转,缩放功能的问题
  • ajaxfileupload插件 ajaxstart
  • Mustache中使用partials的正确方法
  • 为什么会输出3个10?
  • JavaScript 问题 , html 点不到 A 标签
  • promise回调噩梦,请问如何优化呢
  • 记录植物生长阶段的前端插件有吗,或者告诉我farmlogs(下图)这个有会用的大神吗
  • JS有什么办法可以快速找出数组里是否有某个值?
  • 网页如何检测访问者是否使用了诸如adblock这种屏蔽广告的插件?
  • 下面两种构造函数在实质上有什么区别呢?
  • 爬取链家网数据,js文件如何获取所需信息?