从$ .each匿名函数获取变量值

时间:2011-05-06 17:21:51

标签: ajax jquery scope

这是我的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;
}

data是一个JSON对象。

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

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

2 个答案:

答案 0 :(得分:2)

从Ajax回调中,您无法返回数据。我想你想要将你已构建的UL插入到DOM中,所以你应该在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
}

答案 1 :(得分:0)

如果你在 AJAX调用之前创建一个变量并在里面设置一个值 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;