代码之家  ›  专栏  ›  技术社区  ›  Jon

jquery post的javascript函数总是返回未定义的

  •  2
  • Jon  · 技术社区  · 15 年前

    我不知道这里发生了什么,我希望有人能帮上忙,我确信这是一件容易的事情,我只是错过了。

    我在javascript中有一个函数,里面有一个jquery帖子。我想返回只是文本的文章结果,并将其放入变量中。这个数字从帖子中正确返回,但是当我把它放入变量中时,变量会说“未定义”。有什么想法吗?

    var total = GetTotalSize();
    alert(total);
    
    function GetTotalSize(){
        var i = "";
        $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
            i = data.toString();
            return i;
        });
    }
    
    5 回复  |  直到 12 年前
        1
  •  6
  •   Peter Bailey    15 年前

    你不能那样做。记住,Ajax中的“A”表示“异步”。提供给的回调函数 $.post() 之后会执行得很好 GetTotalSize() 执行并返回。

    您将需要重新构造代码以适应这一点。我不能在我的建议中具体说明,因为我不知道您的其余代码是什么样子的,但这里有一个可能性。

    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
    {
      doSomethingWithTotalSize( data.toString() );
    });
    
    function doSomethingWithTotalSize( totalSize )
    {
      // whatever
    }
    
        2
  •  2
  •   Wes Baker    14 年前

    Peter是完全正确的,但是您可以通过传递强制$.Ajax方法同步工作。 async: false .

        3
  •  1
  •   TJ L    15 年前

    问题是你回来了 i 在回调函数之外。基本上当你回来的时候 ,它的内容还不存在,并且在服务器将数据返回到回调函数之前不存在。

        4
  •  1
  •   Ivan Zavalnîi    12 年前

    试试这个

    function GetTotalSize(callback) {    
      $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
           callback(outputData);
        });
    }
    
    function DoSomething(data)
    {
       //....
    }
    
    GetTotalSize(DoSomething);
    
        5
  •  0
  •   Prasad Jadhav Psi    12 年前

    我意识到这是一篇老文章,但我的解决方案是 complete:[delegate] 而不是 success . 这确保了 callback 完成。