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

我在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 。这可确保回调完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top