我需要从 jQuery JSON 调用访问外部局部变量,而不将该变量发送到服务器(因此不使用 data 参数):
for (var prop in channels) {
$.getJSON(url).done(function(json) {
channels[prop].value = ...;
});
}
不幸的是,prop
随着外循环的继续,变量会发生变化。
是否可以将变量绑定到 getJSON 调用?
好的,根据jQuery的代理功能找到了答案:
for (var prop in channels) {
$.getJSON(url).done(
$.proxy(function(json) {
channels[this._prop].value = ...;
}, {_prop: prop}
);
}
本质上,$.proxy()
创建一个包装函数,该函数接受附加context
参数并确保将其作为this
包装函数传递。
使用 js :bind:
for (var prop in channels) {
$.getJSON(url).done(function(json) {
channels[this].value = ...;
}.bind(prop));
}
与 $.ajax 上下文一起使用:
for (var prop in channels) {
$.ajax({
url: url,
dataType: 'json',
context: param,
success: function(data) {
channels[this].value = ...;}
})
}