2014-01-08 5 views
0

У меня есть массив имен файлов в памяти. Мне нужно вывести список этих имен файлов, каждое имя файла в кнопке, которое при щелчке приведет к тому, что пользователь перейдет в другое окно. Код ниже делает это успешно. Тем не менее, мне также нужно поставить рядом с каждой кнопкой имя файла описание, которое содержится в файле. Итак, обратный вызов для поиска поля описания, и это работает хорошо. То, что не работает, - это получить обратный вызов, который ищет описание, чтобы добавить его в элемент списка, содержащий кнопку имени файла, из которой она появилась. То, что я нашел из трех дней усилий, состоит в том, что порядок возвращаемых обратных вызовов кажется случайным. Итак, как получить описание файла, появляющееся рядом с кнопкой имени файла, является проблемой. Код ниже, я думаю, будет работать, если nTestText в обратном вызове сохранил значение, которое оно имело, когда был выдан обратный вызов, который он не создает в настоящее время. Итак, как я могу это сделать. Или, может быть, есть лучший способ. Все предложения приветствуются.пытается сопоставить данные из нескольких обратных вызовов

$('#stServerLoads').empty(); 
    var nTestText=0; 
    for (iLoad=0; iLoad<nLoadsServer; iLoad++) { 
     filename=sServerLoadArray[iLoad]; 
     if (filename.substring(0,4)=='TEST') { 
      $('#stServerLoads').append('<li><button class="load">' + filename.substring(0,filename.length-6) + '</button></li>'); 
      $('button').eq(iButton).on('click', {value:filename}, function(event) { 
       ... 
       window.location='load.html'; 
      }); 
      iButton++; 
      $.getJSON('reports/' + filename,function(new_ld) { 
       $('#stServerLoads li').eq(nTestText).append('&nbsp;&nbsp;' + new_ld.testtext); 
       nTestText++; 
      }); 
     } 
    } 
+0

Где находится другой вызов ajax? –

+0

Хм, не уверен, что вы просите. У меня есть имена файлов, и я использую getJSON для чтения каждого файла, одно поле которого является описанием, которое я хочу добавить к элементу списка. Если вы спрашиваете о вызове ajax, чтобы получить все имена файлов, это много заявлений ранее в программе. – Terry

+0

О, теперь я вас разоблачил. Я добавил решение, проверьте его;) –

ответ

1

Если я хорошо понял вас, это будет решить вашу проблему:

$('#stServerLoads').empty(); 
for (var i=0; i<nLoadsServer; i++) { //changed counter name here 
    (function(iLoad){ //We add a closure 
    filename=sServerLoadArray[iLoad]; 
    if (filename.substring(0,4)=='TEST') { 
     $('#stServerLoads').append('<li><button class="load">' + filename.substring(0,filename.length-6) + '</button></li>'); 
     $('button').eq(iButton).on('click', {value:filename}, function(event) { 
      ... 
      window.location='load.html'; 
     }); 
     iButton++; 
     $.getJSON('reports/' + filename,function(new_ld) { 
      $('#stServerLoads li').eq(iLoad).append('&nbsp;&nbsp;' + new_ld.testtext); 
     }); 
    } 
    })(i); //Calling closure function with counter value 
} 

Проблема заключалась в том, что Iload вар был перезаписываются из-за цикл. (В качестве решения попробуйте, вы добавили nTestText var, не так ли?). Но, добавив замыкание, каждый цикл цикла имеет свою собственную переменную iLoad, поэтому она не перезаписывается и работает безупречно :).

Cheers, из Ла-Пас, Боливия

+0

Думаю, я вижу, к чему вы клоните. Мне было интересно, было ли закрытие решением, но пока еще не выяснил их. Кровать для этого старика сейчас, но я постараюсь реализовать ваше решение утром, когда мой стареющий мозг работает намного лучше. Большое спасибо за ответ. – Terry

+1

Добро пожаловать. Я посетил вашу веб-страницу, и я действительно впечатлен тем, что вы делаете. Я был бы честен, чтобы помочь вам, когда это возможно для такого замечательного проекта. –

+0

Вы отлично работаете. Кроме того, это позволило мне лучше понять закрытие. Они имеют больше смысла, когда вы видите, что они решают настоящую проблему, которую вам нужно решить. Кроме того, спасибо за ваше предложение, я буду помнить об этом. У вас случайно есть какие-то предпосылки в авиации? Мой адрес: [email protected] – Terry

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