Почему это не работает? JQuery Javascript - PullRequest
0 голосов
/ 12 мая 2010
$(document).ready(function() {
  musicList = new array()
  counter = 0;

  if($(".rA, .trA, .dA, .hA").length > 0)
  {

   /*$(".rA, .trA, .dA, .hA").each(function(e){*/
   $(".hA").each(function(e){

    $.post("/index/audio/ajax.track", { id: $(this).attr("rel") },
       function(data){




                                  /*THIS DOESN'NT WORK */
     musicList.push(data.file);
                                  /*THIS DOESN'NT WORK */
     alert(data.file);/*this words*/
       }, "json");

    counter++;

   });

   if(counter>0)
   {
    alert(counter);
   }
  }


});

Я не вижу ничего плохого в коде, но понятия не имею, почему он не работает. Я просто потратил 3 часа, пытаясь заставить его работать

/ редактировать / исправил это ... пуш работал, предупреждение (счетчик) было немного глупо с моей стороны причина ajax = async

спасибо всем

1 Ответ

1 голос
/ 12 мая 2010
  • Объявите переменные перед их использованием
  • Всегда заканчивайте операторы ;.
  • Откажитесь от первого оператора if, ничего не добавляется
  • Вы можете использовать $(f) вместо $(document).ready(f), если хотите
  • Вы можете использовать [] вместо new Array(), если хотите

Проблема с вашим кодом, вероятно, заключается в том, что функция, которую вы передаете $.post, запускается позже , но управление возвращается сразу, поэтому, когда вы попадаете в строку, начинающуюся с if(counter>0) , функция никогда не выполнялась. Вы можете решить эту проблему, увеличивая переменную каждый раз, когда вы вызываете $ .post, когда вы возвращаете данные, вы уменьшаете и проверяете, все ли сообщения возвращены, и если это так, вы делаете то, что хотите. Пример: * +1022 *

//...
var list = [];
var counter = 0;
$(".something").each(function() {
  counter++;
  $.post("http://www.example.com/", {foo = "bar"}, function(data) {
    list.push(data);
    counter--;
    if(counter === 0){
      alert(list.length);
    };
  })
});
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...