使用JQuery POST的Javascript函数始终返回undefined

时间:2009-09-09 16:59:30

标签: javascript jquery function post

我不知道这里发生了什么,并希望有人可以提供帮助,我确信这是一件容易的事,我只是缺席了。

我在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;
    });
}

5 个答案:

答案 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完成。