js ajax 问题

图片描述

请问下面那个为何为undefined

阅读 3.3k
6 个回答

ajax是异步回调success的方法对returnData赋值的,执行的时候顺序执行,走到console.log的时候,success还没执行呢。

原因就是楼上兄弟说的那样,如果你想实现类似的功能,可以用defer/promise对象,或者直接

function getInfo(url,id){
  return $.ajax({...});
}
$.when(getInfo(url.id)).done(function(response){
  console.log(response);
})

你的逻辑是同步的,但Ajax请求是异步的,js引擎会接着执行下面的部分,Ajax可能并没有执行完,returnData就没有赋值。建议你学习JS异步编程,无耻的贴上个人总结的JS异步编程

加一行代码就好了

$.ajax({
 async:false;
})

默认情况下jq的$.ajax()会是异步请求,所谓的异步就是不会对代码执行进行阻塞,也就说在进行请求的同时会继续向下执行下面的代码,不会等到请求返回后在执行,所以在你的回调函数还没进行时,代码已经向下执行到console.log(returndata)了,这个时候的returndata是没有赋值的,所以会输出undefined.

你这个函数写的没意义,你应该封装一个api,传一个url,一个请求的参数,还有一个回调,然后在需要这个data的时候使用api接口发送请求,传入的回调里会有data参数,直接拿来进行后续操作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题