我不知道这里发生了什么,并希望有人可以提供帮助,我确信这是一件容易的事,我只是缺席了。
我在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;
});
}
答案 0 :(得分:6)
你不能这样做。请记住,AJAX中的“A”表示“异步”。您$.post()
提供的回调函数将在GetTotalSize()
执行并返回后很好地执行。
您需要重新构建代码以适应这种情况。我不能在我的推荐中具体说明,因为我不知道你的代码的其余部分是什么,但这是可能的。
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
doSomethingWithTotalSize( data.toString() );
});
function doSomethingWithTotalSize( totalSize )
{
// whatever
}
答案 1 :(得分:2)
彼得是绝对正确的,但您可以通过传递async: false
来强制$ .ajax方法同步工作。
答案 2 :(得分:1)
问题是您在回调函数之外返回i
。基本上当你返回i
时,它的内容还不存在,并且在服务器将数据返回给你的回调函数之前不会存在。
答案 3 :(得分:1)
试试这个
function GetTotalSize(callback) {
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
callback(outputData);
});
}
function DoSomething(data)
{
//....
}
GetTotalSize(DoSomething);
答案 4 :(得分:0)
我发现这是一篇较旧的帖子,但我的解决方案是使用complete:[delegate]
而不是success
。这可确保callback
完成。