Jquery。完成计时

时间:2013-07-09 09:24:06

标签: javascript jquery

我有以下代码 - 它的意思是根据sql查询动态构建指向其他内容的链接列表。 sql中的记录包含一个形成为“itemX,itemY,Recipe-Z”的字段,其中最后一个元素是可选的 - 代码将每个列表元素提供给另一个sql查询,当它在最后一个中提供时(并获取null)它应该只打印出来。相反,当我运行它时,我一直在我想要的元素之前获取元素。只需在z中添加1就可以解决问题,但我想知道为什么会这样做。

 $("#components").html("<span>BUILDS FROM</span>");
 var componentslist = data[9].split(", ");
 for (var z = 0; z < componentslist.length; z++){
   $.getJSON("items.php", {item:componentslist[z]}).done(function(internald){
     if(internald === null){
       $("#components").append("<br\><span>"+componentslist[z+1]+"</span>");
     } else {
       $("#components").append("<br\><span class=\"crosslink\" title=\""+internald[0]+"\">"+internald[1]+" - "+internald[2]+"</span>");
     }
   });
 }

所以如果数据[9]是

“item3,item4,Recipe - 5g”

它将查询这些项目并吐出

“项目3 - 1g,项目4 - 2g,食谱 - 5g”

但如果在nullcase上我只使用componentslist [z],那就说

“项目3 - 1g,项目4 - 2g,项目4”

即使在循环中的那个点,z应该是2,而不是1。

1 个答案:

答案 0 :(得分:1)

关闭变量用法是一个经典问题

$("#components").html("<span>BUILDS FROM</span>");
var componentslist = data[9].split(", ");
for (var z = 0; z < componentslist.length; z++){
    (function(idx){
        $.getJSON("items.php", {item:componentslist[idx]}).done(function(internald){
            if(internald === null){
                $("#components").append("<br\><span>"+componentslist[idx+1]+"</span>");
            } else {
                $("#components").append("<br\><span class=\"crosslink\" title=\""+internald[0]+"\">"+internald[1]+" - "+internald[2]+"</span>");
            }
        });
    })(z)
}