关于此代码:
$.each(divList, function(){
var dropdown = '';
$.get("ajax.php",{'some':'params', 'other':'params'},function(msg){
dropdown = msg;
console.log( dropdown );
});
console.log( dropdown );
$(dropdown).appendTo($(this));
});
...第一个日志显示dropdown变量保存从ajax返回的正确文本,第二个是空的(并且appendTo什么都不做)。
有没有办法让这个有效?使用浏览器是否存在依赖性?
答案 0 :(得分:2)
$.get()
异步:它返回非常快,在后台执行其工作,并通过调用您提供的回调函数发出完成信号。
由于您第二次拨打console.log()
以及拨打appendTo()
的电话不在回调范围内,因此在$.get()
完成并设置dropdown
之前,它们会过早运行。< / p>
通常的模式是将appendTo()
的调用放在回调函数中:
$.each(divList, function() {
$.ajax({
url: "ajax.php",
data: {
// your parameters...
},
context: this,
success: function(msg) {
console.log(msg);
$(msg).appendTo(this);
}
});
});
编辑:如果您想从回调函数中访问原始this
引用,可以将其context
选项传递给$.ajax(),上面的代码确实如此。
答案 1 :(得分:2)
将this
分配给函数顶部的变量,以便异步ajax调用可以访问它:
$.each(divList, function(){
var me = this;
$.get("ajax.php",{'some':'params', 'other':'params'},function(msg){
var dropdown = msg;
console.log( dropdown );
$(dropdown).appendTo($(me));
});
})
答案 2 :(得分:1)
将this
的外部范围中的$get
分配给新变量,您可以在成功处理程序中访问该变量