【发布时间】:2017-04-01 11:00:41
【问题描述】:
即使这个问题已经得到解答,并且我已经解决了其中的一些问题,但我仍然找不到我做错了什么。
基本上我有一个返回ajax成功结果的函数:
var Functioncalling = function(id){
var Infotoreturn=null;
formdata = {
'id': id
};
$.ajax({
type: 'POST',
url: 'http://localhost:20012/pr/servlet',
data: formdata,
contentType: "text/html",
success: function(result){
console.log("1="+result);
Infotoreturn = result;
}
});
console.log("2="+Infotoreturn);
return Infotoreturn;
}
调用函数:
var idreturned = Functioncalling(idvalue);
console.log("3="+idreturned);
现在,在我的第一个控制台输出中,我得到的数据完全符合我的设想。但是第二个和第三个输出都是空的。
【问题讨论】:
-
不能返回异步请求的结果。异步请求发生在其余代码的(同步)流之外,因此当您尝试返回结果时,请求尚未解决。你需要了解 promises 或者 jQuery 中的延迟对象。
-
除了@Utkanos 所说的内容之外,您最后的退货声明还为时过早。变量
Infotoreturn将为null,因为Ajax 调用是异步执行的,即并行执行。主函数将在其操作完成之前返回。控制台会记录结果,但对于变量来说为时已晚。 -
@Manngo 你的意思是早点换变量,对吧?
-
没错。实际上,并且 Ajax 调用在后台延迟,因此
return语句仍然具有原始值。您可以使用更高级的功能,例如 Promises 和延迟对象,也可以将下一步编写为回调。我将在答案中说明后者。 -
使用异步编程,您需要改变对代码的看法。阅读并理解这个:stackoverflow.com/questions/17808651/return-function-javascript/… 和这个:stackoverflow.com/questions/17460556/…
标签: javascript jquery ajax