jQuery变量在闭包中的可见性
jQuery variable visibility inside closure
在此代码上:
$.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()
完成并设置dropdown
之前运行得太早。
通常的模式是将对appendTo()
的调用放在回调函数中:
$.each(divList, function() {
$.ajax({
url: "ajax.php",
data: {
// your parameters...
},
context: this,
success: function(msg) {
console.log(msg);
$(msg).appendTo(this);
}
});
});
EDIT:如果您想从回调函数访问原始this
引用,可以在context
选项中将其传递给$.ajax(),就像上面的代码一样。
将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));
});
})
将$get
外部作用域中的this
分配给一个新变量,您可以在成功处理程序中访问该变量
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- jQuery css可见性在load方法中不起作用
- Javascript.闭包和dynamic'这'实际上具有约束力
- 构造函数函数闭包变量
- 闭包js框架-将ArrayBuffer转换为字符串
- 页面可见性API实际上支持操作系统屏幕锁定吗
- 如何测试只在闭包范围中可见的javascript方法
- 对闭包变量的更改是否在使用闭包的回调中可见
- jQuery变量在闭包中的可见性
- for循环中的Javascript闭包:为什么循环索引i不可见?