关于ajax:从$ .each匿名函数获取变量值

Getting variable value from $.each anonymous function

本问题已经有最佳答案,请猛点这里访问。

这是我的AJAX成功回调:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}

data是一个JSON对象。

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

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


从Ajax回调中,您无法返回数据。 我想你要插入你已经构建到DOM中的UL,所以你应该在Ajax回调函数中进行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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。 所以你不能做像这样的事情

1
2
3
4
function GetMyList() {
     //AJAX CALL
     //RETURN RESULT OF AJAX CALL
}


如果在AJAX调用之前创建变量并在success函数内设置一个值,则可以在代码的任何其他部分读取变量。

编辑

根据您的注释(您需要从函数返回此值),您对此函数的所有调用都需要等待响应。 然后,我建议你关掉async

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;