尽管这个问题已经得到了回答,我已经经历了其中的一些问题,但我仍然找不到我做错了什么。
基本上,我有一个函数,它返回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);现在,在我的第一个控制台输出中,我得到了我应该得到的数据。但是第二个和第三个输出都是空的。
发布于 2017-04-01 11:34:51
除了@Utkanos所说的,你在结尾的返回声明还为时过早。
变量Infotoreturn将为null,因为Ajax调用是异步执行的,即并行执行。主要功能将在其运行完成之前返回。控制台将记录结果,但对于变量来说为时已晚。
实际上,Ajax调用在后台被延迟,因此返回语句仍然具有原始值。
您可以使用更高级的特性,如承诺和延迟对象,也可以将下一步编写为回调。
下面是一个使用回调的示例:
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);https://stackoverflow.com/questions/43155985
复制相似问题