本问题已经有最佳答案,请猛点这里访问。
这是我的AJAX成功回调:
success: function(data){
var uD = '
- ';
$.each(data['user details'], (function(key,val){
uD += '
' + key + ':' + val + '
';
});
uD += '
';
return uD;
}
data是一个JSON对象。
正如您所看到的,我正在尝试从JSON对象构建一个列表,但是当我返回变量uD时,它是未定义的。 如何获得超出$ .each函数范围的uD的值?
编辑:对不起,我应该指定。 return语句只在AJAX回调中,因为AJAX调用在另一个函数内(需要返回一些东西。)因为它是异步的,所以我无法在AJAX调用之后返回,它必须在回调中。
这不是$.each的问题,您无法从Ajax回调中返回数据。 请参阅:jQuery:在ajax调用成功后返回数据(投票被关闭为重复)
@Kelly:each回调中没有return。 数据附加到回调有权访问的uD变量。 这将正常工作。 但是OP正在从success回调中返回数据,这不起作用。
根据wanavak的评论,似乎这个问题存在缺陷。
从Ajax回调中,您无法返回数据。 我想你要插入你已经构建到DOM中的UL,所以你应该在Ajax回调函数中进行。
success: function(data){
var uD = '
- ';
$.each(data['user details'], (function(key,val){
uD += '
' + key + ':' + val + '
';
});
uD += '
';
$('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回调调用另一个函数,或者触发一个事件。
从技术上讲这是正确的。 谢谢。
如果在AJAX调用之前创建变量并在success函数内设置一个值,则可以在代码的任何其他部分读取变量。
编辑
根据您的注释(您需要从函数返回此值),您对此函数的所有调用都需要等待响应。 然后,我建议你关掉async。
var uD = null;
...
async: false,
success: function(data){
uD = '
- ';
$.each(data['user details'], (function(key,val){
uD += '
' + key + ':' + val + '
';
});
uD += '
';
}
return uD;