Javascript jQuery变量在闭包内的可见性
关于此代码:Javascript jQuery变量在闭包内的可见性,javascript,jquery,ajax,Javascript,Jquery,Ajax,关于此代码: $.each(divList, function(){ var dropdown = ''; $.get("ajax.php",{'some':'params', 'other':'params'},function(msg){ dropdown = msg; console.log( dropdown ); }); console.log( dropdown ); $(dropdown).appendTo(
$.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));
});
…第一个日志显示下拉变量保存从ajax返回的正确文本,第二个为空(appendTo不执行任何操作)
有没有办法让这一切顺利?所使用的浏览器是否存在依赖关系?$。get()
是异步的:它返回速度非常快,在后台执行工作,并通过调用您提供的回调函数发出完成信号
由于对console.log()
的第二次调用和对appendTo()
的调用都在回调之外,因此在$.get()
完成并设置下拉列表之前,它们将运行得太快
通常的模式是在回调函数中调用appendTo()
:
$.each(divList, function() {
$.ajax({
url: "ajax.php",
data: {
// your parameters...
},
context: this,
success: function(msg) {
console.log(msg);
$(msg).appendTo(this);
}
});
});
编辑:如果要从回调函数访问原始的此
引用,可以像上面的代码那样,在上下文
选项中将其传递给。$。get()
是异步的:返回速度非常快,在后台执行其工作,并通过调用您提供的回调函数发出完成信号
由于对console.log()
的第二次调用和对appendTo()
的调用都在回调之外,因此在$.get()
完成并设置下拉列表之前,它们将运行得太快
通常的模式是在回调函数中调用appendTo()
:
$.each(divList, function() {
$.ajax({
url: "ajax.php",
data: {
// your parameters...
},
context: this,
success: function(msg) {
console.log(msg);
$(msg).appendTo(this);
}
});
});
编辑:如果要从回调函数访问原始的此
引用,可以在上下文
选项中将其传递给,就像上面的代码那样。将$get
范围之外的此
分配给新变量,您可以在成功处理程序中访问它将此
分配给$get
范围之外的一个新变量,您可以在成功处理程序中访问该变量将此
分配给函数顶部的一个变量,以便异步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));
});
})
将此
分配给函数顶部的变量,以便异步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));
});
})
不要。有没有办法在$.get()方法中访问$(this)(divList中的元素)?是否可以将其保存在变量或类似的文件中?是的,刚刚尝试过。只需使用var which=$(this)保存它,并在闭包中使用它。谢谢。您正在向服务器发送上下文:
。这对回调上下文没有帮助。@amnotiam,非常正确,$.ajax()
必须被调用才能实现这一点。答案相应地更新了,谢谢提醒:)看来设置上下文是正确的方法。它还使多个$.get()按预期工作。有没有办法在$.get()方法中访问$(this)(divList中的元素)?是否可以将其保存在变量或类似的文件中?是的,刚刚尝试过。只需使用var which=$(this)保存它,并在闭包中使用它。谢谢。您正在向服务器发送上下文:
。这对回调上下文没有帮助。@amnotiam,非常正确,$.ajax()
必须被调用才能实现这一点。答案相应地更新了,谢谢提醒:)看来设置上下文是正确的方法。它还使多个$.get()按预期工作。如果在同一上下文中有多个$,则似乎不起作用。如果在同一上下文中有多个$,则仅使最后一个appendTo工作。如果在同一上下文中有多个$,则似乎不起作用。如果在同一上下文中有多个get,则仅使最后一个appendTo工作。