【问题标题】:Getting variable value from $.each anonymous function [duplicate]从 $.each 匿名函数中获取变量值 [重复]
【发布时间】:2011-08-20 08:50:19
【问题描述】:

这是我的 AJAX 成功回调:

success: function(data){
        var uD = '<ul class="user-details">';
        $.each(data['user details'], (function(key,val){
            uD += '<li><label>' + key + ':</label><span>' + val + '</span></li>';
        });
        uD += '</ul>';
        return uD;
}

数据是一个 JSON 对象。

如您所见,我正在尝试从 JSON 对象构建一个列表,但是当我返回变量 uD 时,它是未定义的。如何让uD 的值超出 $.each 函数的范围?

编辑:对不起,我应该指定的。 return 语句仅在 AJAX 回调中,因为 AJAX 调用在另一个函数中(需要返回一些东西。)因为它是异步的,所以我不能在 AJAX 调用之后返回,它必须在回调中。

【问题讨论】:

  • 不是$.each的问题,不能从Ajax回调中返回数据。见:jQuery: Return data after ajax call success(投票作为重复关闭)
  • @Kelly:each 回调中没有return。数据附加到回调可以访问的uD 变量。这将正常工作。但是 OP 正在从 success 回调返回数据,这将不起作用。
  • 根据下面 wanavak 的评论,这个问题似乎有缺陷。

标签: ajax jquery scope


【解决方案1】:

如果您在 AJAX 调用之前创建一个变量 并为它设置一个值inside success 函数,您将能够在任何其他变量上读取它你的一部分代码。

编辑

根据您的评论(您需要从函数返回此值),您对该函数的所有调用都需要等待它的响应。那么,我建议你关闭async

var uD = null;

...

async: false,
success: function(data){
    uD = '<ul class="user-details">';
    $.each(data['user details'], (function(key,val){
        uD += '<li><label>' + key + ':</label><span>' + val + '</span></li>';
    });
    uD += '</ul>';
}

return uD;

【讨论】:

    【解决方案2】:

    从 Ajax 回调中,您不能返回数据。我猜你想插入你已经内置到 DOM 中的UL,所以你应该在你的 Ajax 回调函数中这样做。

    success: function(data){
            var uD = '<ul class="user-details">';
            $.each(data['user details'], (function(key,val){
                uD += '<li><label>' + key + ':</label><span>' + val + '</span></li>';
            });
            uD += '</ul>';
            $('body').append(uD);
    }
    

    代替body,指定您想要插入的元素或使用任何其他DOM插入函数。

    使用异步 AJAX 调用,您无法真正做到return 的事情。所以你不能做像

    这样的事情
    function GetMyList() {
         //AJAX CALL
         //RETURN RESULT OF AJAX CALL
    }
    

    【讨论】:

    • 对不起,我应该指定的。 return 语句仅在 AJAX 回调中,因为 AJAX 调用在另一个函数中(需要返回一些东西。)因为它是异步的,所以我不能在 AJAX 调用之后返回,它必须在回调中。
    • @wanovak 因为它是async,所以您无法真正知道它何时会真正返回,因此您不能在进行AJAX 调用的another function 中依赖它。你可以让你的 AJAX 回调调用另一个函数,或者触发一个事件。
    • 技术上这是正确的。谢谢。
    猜你喜欢
    • 2013-11-22
    • 2016-03-27
    • 1970-01-01
    • 2021-07-02
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多