2013-05-06 2 views
1

мне нужно получить доступ к внешней, локальной переменной из вызова JQuery JSON без отправки этой переменной на сервер (следовательно, не используя параметр данных):Как связать переменные с вызовом jQuery getJSON?

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

К сожалению prop vairable изменения, как внешний цикл продолжается.

Можно ли связать переменные с вызовом getJSON?

ответ

3

Хорошо, нашли ответ, основанный на jQuery's proxy function:

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

По существу, $.proxy() создает функцию-оболочку, которая принимает дополнительный параметр context и убедитесь, что оно передается как this к обернутой функции.

+0

В качестве альтернативы, это также должно быть возможно обернуть вызов $ .getJSON в своей собственной функции, которая бы также поддерживают параметры функции. – andig

+0

Наконец-то нашел ответ, спасибо! IE8 давал мне «объект не поддерживает свойство или метод», взял меня целый день до этого решения! Благодаря! – ronnyrr

+0

Я думаю, что обертка функции ajax для создания закрытия будет использовать только последнее значение внешней функции, а не значение, когда оно было вызвано, но спасибо за указатель прокси! – ejectamenta

0

Использование с ЯШ: обязывать:

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 = ...;} 
     }) 
} 
Смежные вопросы