即使这个问题已经得到解答,我已经通过其中一些问题,但我仍然无法找到我做错的事。
基本上我有一个返回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);
现在,在我的第一个控制台输出中,我正好得到了我想要的数据。但第二和第三个输出都是空的。
答案 0 :(得分:0)
除了@Utkanos所说的,你最后的回复陈述还为时过早。
变量Infotoreturn
将为null,因为Ajax调用是异步执行的,即并行执行。主函数将在其操作完成之前返回。控制台将记录结果,但变量为时已晚。
实际上,Ajax调用在后台延迟,因此return语句仍然具有原始值。
您可以使用更高级的功能,例如Promises&延迟对象,或者您可以将下一步写为回调。
以下是使用回调的示例:
var Functioncalling = function(id,callback) {
var Infotoreturn=null;
formdata = {
'id': id
};
$.ajax({
// existing code
success: function(result){
console.log("1="+result);
// Modification
callback(result);
}
});
// nothing to report yet
}
function where_I_need_the_result(result) {
console.log('I got: '+result);
}
Functioncalling(id,where_I_need_the_result);