【问题标题】:Javascript Function With JQuery POST Always Returns undefined带有 JQuery POST 的 Javascript 函数始终返回未定义
【发布时间】:2009-09-09 16:59:30
【问题描述】:

我不知道这里发生了什么,希望有人能提供帮助,我确信这是一件容易的事情,我只是想念。

我在 javascript 中有一个函数,其中有一个 JQuery 帖子。我想返回只是文本的帖子结果并将其放入变量中。该数字从 Post 中正确返回,但是当我将其放入变量时,变量显示“未定义”。有什么想法吗?

var total = GetTotalSize();
alert(total);

function GetTotalSize(){
    var i = "";
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
        i = data.toString();
        return i;
    });
}

【问题讨论】:

    标签: javascript jquery function post


    【解决方案1】:

    你不能那样做。请记住,AJAX 中的“A”表示“异步”。您提供给$.post() 的回调函数将在GetTotalSize() 执行并返回后很好地执行。

    您需要重新构建代码以适应这种情况。我无法具体说明我的建议,因为我不知道您的其余代码是什么样的,但有一种可能性。

    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
    {
      doSomethingWithTotalSize( data.toString() );
    });
    
    function doSomethingWithTotalSize( totalSize )
    {
      // whatever
    }
    

    【讨论】:

      【解决方案2】:

      Peter 绝对正确,但是您可以通过传递 async: false 来强制 $.ajax 方法同步工作。

      【讨论】:

        【解决方案3】:

        问题是您在回调函数之外返回i。基本上当你返回i时,它的内容还不存在,直到服务器将数据返回给你的回调函数后才会存在。

        【讨论】:

        • 感谢您的快速回复!我尝试了您的建议并更新了我的示例代码,但我仍然遇到同样的问题,还有其他想法吗?
        【解决方案4】:

        试试这个

        function GetTotalSize(callback) {    
          $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
               callback(outputData);
            });
        }
        
        function DoSomething(data)
        {
           //....
        }
        
        GetTotalSize(DoSomething);
        

        【讨论】:

          【解决方案5】:

          我意识到这是一篇较旧的帖子,但我的解决方案是使用 complete:[delegate] 而不是 success。这可以确保callback 是完整的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-17
            • 1970-01-01
            • 1970-01-01
            • 2019-01-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多