js ajax return 问题, 接收 return list 是undefined ,请高手指点, 急...

发布网友 发布时间:2022-04-23 03:35

我来回答

2个回答

热心网友 时间:2023-02-09 15:47

楼主..看到你的追问.ajax不是这样的..ajax是异步执行
也就是说代码运行顺序是

开始运行代码 - ajax进行请求 - return list这时候函数已经结束
因为请求是需要时间的.所以在ajax完成请求之前已经运行到return list了

也就是说return之前请求还没有完成,所以list是undefined

所以你应该要把要调用list 的函数放到success里才可以

热心网友 时间:2023-02-09 17:05

先在
list = indexList;
后面添加打印语言
alert(indexList)看看取回来的东西是不是正确的
如果是undefined那么可能是jquery的ajax写的有问题,或者是注意请求的地址路径是否正确先
咱先确定是否该函数能顺利的被解析并执行。追问success(indexList){
list = indexList;
alert(list); //等于object 后执行
}
});
alert(list); //等于undefined; 先执行
return list;

在 success中打印list是有值的, 但是在return前面加alert(list);为undefined , 而且是先执行ajax外面的那个alert

追答呵呵!“先执行ajax外面的那个alert”明白了
是这样的。因为您设置async:false,代表要通过异步来调用ajax获取结果
所以当执行ajax的xmlHttpRequest对象后,它会顺序的将程序继续向下运行当运行到外部的alert(list)时,这个时候的list还没有被赋值。因为ajax的对象还没有被返回结果,因为它需要多出一步浏览器和服务器之间的响应所以需要更多的一段时间,而这时候程序已经继续运行到了外部alert()则它返回没有赋值的list.
而当xmlHttpRequest对象获取了信息返回后,会调用回调函数,执行success这里指定的功能函数,而这时候list被赋返回值,它就是有值的了
您可以把async改成true您就看出端倪了,改完以后肯定是先运行内部的alert,然后是运行外部的。
因为不是异步的就相当于在一个线程里执行程序,要等到取完了结果再向下执行

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com