JavaScript: передача изменяющихся параметров в обратный вызов - PullRequest
3 голосов
/ 23 июня 2010

Теперь вот веселая проблема.У меня есть массив объектов, как показано ниже:

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

Теперь я перебираю эти объекты, чтобы загрузить некоторую информацию с сервера по определенным адресам, используя метод $ .getJSON () jQuery и после некоторого сложного маневрирования черезфункция обратного вызова, должна поместить 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 все еще не создает отдельные данные в анонимной функции.Есть ли способ получить уникальную ссылку на данные на каждой итерации?

1 Ответ

3 голосов
/ 23 июня 2010

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

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