2

我需要从 jQuery JSON 调用访问外部局部变量,而不将该变量发送到服务器(因此不使用 data 参数):

for (var prop in channels) {
    $.getJSON(url).done(function(json) {
        channels[prop].value = ...;
    });
}

不幸的是,prop随着外循环的继续,变量会发生变化。

是否可以将变量绑定到 getJSON 调用?

4

2 回答 2

3

好的,根据jQuery的代理功能找到了答案:

for (var prop in channels) { 
    $.getJSON(url).done(
        $.proxy(function(json) { 
            channels[this._prop].value = ...; 
        }, {_prop: prop}
    ); 
}

本质上,$.proxy()创建一个包装函数,该函数接受附加context参数并确保将其作为this包装函数传递。

于 2013-05-06T10:52:38.213 回答
0

使用 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 = ...;}
        })
}
于 2017-06-28T13:58:52.387 回答