使用JQuery POST的Javascript函数始终返回undefined
-
05-07-2019 - |
题
我不知道这里发生了什么,并希望有人可以提供帮助,我确信这是一件容易的事,我只是缺席了。
我在javascript中有一个函数,里面有一个JQuery帖子。我想返回帖子的结果,它只是文本并将其放在变量中。该数字从Post正确返回,但当我将其放入变量时,变量显示为“undefined”。有什么想法吗?
var total = GetTotalSize();
alert(total);
function GetTotalSize(){
var i = "";
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
i = data.toString();
return i;
});
}
解决方案
你不能这样做。请记住,“A”是指“A”。在AJAX中表示“异步”。在 GetTotalSize()
执行并返回后,您提供给 $ .post()
的回调函数将很好地执行。
您需要重新构建代码以适应这种情况。我不能在我的推荐中具体说明,因为我不知道你的代码的其余部分是什么,但这是可能的。
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
doSomethingWithTotalSize( data.toString() );
});
function doSomethingWithTotalSize( totalSize )
{
// whatever
}
其他提示
彼得是绝对正确的,但您可以通过传递 async:false
来强制$ .ajax方法同步工作。
问题是你在回调函数之外返回 i
。基本上当你返回 i
时,它的内容还不存在,并且在服务器将数据返回给你的回调函数之前不会存在。
试试这个
function GetTotalSize(callback) {
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
callback(outputData);
});
}
function DoSomething(data)
{
//....
}
GetTotalSize(DoSomething);
我意识到这是一篇较旧的帖子,但我的解决方案是使用 complete:[delegate]
而不是 success
。这可确保回调
完成。
不隶属于 StackOverflow