为什么这不起作用? jquery javascript

时间:2010-05-12 08:47:00

标签: javascript jquery ajax

$(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 个答案:

答案 0 :(得分:1)

  • 在使用变量之前声明变量
  • 始终使用;结束语句。
  • 抛弃第一个if语句,它不会添加任何内容
  • 如果您需要,可以使用$(f)代替$(document).ready(f)
  • 如果您需要,可以使用[]代替new Array()

您的代码问题可能是您传递给$.post的函数正在稍后运行,但是会立即返回控件,所以当您到达开头的行时if(counter>0),该函数从未执行过。你可以通过每次调用$ .post时递增一个变量来解决这个问题,当你收到数据时你会减少并检查所有帖子是否都已返回,如果是,你就可以做你想做的事情。例如:

//...
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);
    };
  })
});
//...