2010-06-22 5 views
3

Теперь вот забавная проблема. У меня есть массив объектов, как:JavaScript: передача параметров изменения в обратный вызов

objRequests = [ 
    { 
     url: "/cgi-bin/script1.cgi", 
     dest: "#div1" 
    }, 
    { 
     url: "/cgi-bin/script1.cgi", 
     dest: "#div2" 
    } 
]; 

Теперь я перебирать эти объекты, чтобы загрузить информацию с сервера на конкретных адресов с помощью JQuery в $ .getJSON() и после некоторой фантазии коверкая через функцию обратного вызова , нужно поместить HTML в div, идентификатор которого указан через «dest».

Обычно, если мне нужно указать дополнительные данные для входа в обратный вызов, я бы использовал анонимную функцию, и это работает нормально. Проблема здесь в том, что указатель на переменную для адресата, похоже, остается прежним, поэтому при каждом обратном вызове адресат всегда равен «# div2».

Я попытался следующие:

for (var loop = 0; loop < objRequest.length; loop++) 
{ 
    var exec = new function(objResponse) 
    { 
     processResponse(objResponse, objRequest[loop].dest); 
    } 

    exec.dest == objRequest[loop].dest; 

    $.getJSON(objConfig.strTicketScript, exec); 
} 

, а также

for (var loop = 0; loop < objRequest.length; loop++) 
{ 
    var destination = objRequest[loop].dest; 

    var exec = new function(objResponse) 
    { 
     processResponse(objResponse, destination); 
    } 

    exec.dest == objRequest[loop].dest; 

    $.getJSON(objConfig.strTicketScript, exec); 
} 

, но по какой-то причине Firefox до сих пор, кажется, не создавать отдельные данные в анонимной функции. Есть ли способ получить уникальную ссылку на данные на каждой итерации?

+2

посмотреть все вопросы, связанные с - [JavaScript + закупорки + петли] (http://stackoverflow.com/questions/tagged/javascript+closures+loops) – Anurag

+0

Очень хороший ответ можно найти здесь: http://stackoverflow.com/questions/1552941/variables-in-anonymous-functions-can-someone-explain-the-following – Shog9

+0

Обе отличные ссылки. Спасибо за информацию. У меня были проблемы с поиском, так как я не знал, что искать: S – RandomInsano

ответ

3

Вам нужно будет сделать закрытие:

var exec = (function(dest){ 
    return function(objResponse) { 
    processResponse(objResponse, dest); 
    } 
})(objRequest[loop].dest); 
+1

Это бар, ничто, но самое странное обозначение, которое я видел. Но эта закрывающая вещь, очень информативная! Я нашел дополнительную информацию здесь: http://www.jibbering.com/faq/notes/closures/ – RandomInsano

Смежные вопросы