Ajax 从$获取变量值。每个匿名函数

Ajax 从$获取变量值。每个匿名函数,ajax,jquery,scope,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&g

这是我的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;
}
成功:函数(数据){
var uD='
    '; $.each(数据['user details'],(函数(键,val){ uD+='
  • '+key+':'+val+'
  • '; }); uD+='
'; 返回uD; }
数据是一个JSON对象

如您所见,我正试图从JSON对象中构建一个列表,但当我返回变量
uD
时,它还没有定义。如何才能使
uD
的值超过$的范围。每个函数


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

从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);
}
如果在AJAX调用之前创建一个变量,并在
success
函数中为其设置一个值,则可以在代码的任何其他部分读取该变量

编辑

根据您的注释(您需要从函数返回此值),所有对此函数的调用都需要等待it响应。然后,我建议您关闭
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;
var uD=null;
...
async:false,
成功:功能(数据){
uD='
    '; $.each(数据['user details'],(函数(键,val){ uD+='
  • '+key+':'+val+'
  • '; }); uD+='
'; } 返回uD;
这不是
$的问题。对于每个
,您都无法从Ajax回调返回数据。请参阅:(投票决定以重复方式关闭)@Kelly:在
每个
回调中都没有
返回
。数据被附加到回调可以访问的
uD
变量中。这将正常工作。但是OP从
成功
回调返回数据,这将不起作用。根据wanavak下面的评论,这个问题似乎有缺陷w、 抱歉,我应该指定。return语句仅在AJAX回调中,因为AJAX调用在另一个函数中(需要返回某些内容)由于它是异步的,我不能在AJAX调用之后返回,它必须在回调中。@wanovak,因为它是
async
,您无法真正知道它何时实际返回,因此您不能在发出AJAX调用的
另一个函数中依赖它。您可以让AJAX回调调用另一个函数,或者触发一个事件。从技术上说这是正确的。谢谢。
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;