从嵌套循环引用父循环

时间:2013-05-21 12:37:32

标签: ajax json jquery nested-loops

这就是我想要实现的目标:我的数据库中有两个表 - “区域”和“分销商”,两者都有一个region_id列。我想要的是:

1)遍历'regions'表,为每个区域创建一个div,其region_id为div id,然后将region_name附加到该div。

2)有一个嵌套循环,它将遍历'分销商'表,拉出所有具有相同region_id的分销商,然后将其附加到第1阶段的同一个div。

所以我尝试了这段代码:

$(function(){
    $.getJSON("inc/API.php", {command:"get_regions"},
        function(result){
            var div_length = 786/result.length;
            for(var i=0; i<result.length; i++){
                var div_name = "div_region_"+result[i].region_id;
                $("<div id='"+div_name+"' class='div_region' 
                    style='width:"+div_length+"px; float:right;'></div>").appendTo("#content");

                $("<b>"+result[i].region_name+"</b></br>").appendTo("#"+div_name);
                $.getJSON("inc/API.php", {
                    command:"get_distributors", 
                    region_id: result[i].region_id
                },
                function(result){
                    for(var j=0; j<result.length; j++){
                        $("#"+div_name).append(result[j].distributor_name+"</br>");
                    }
                });
            }
     });
});

虽然它会创建div并为它们附加区域名称,但是分发者名称目前都附加到最后一个div。这里的错误在哪里,我该如何解决?

1 个答案:

答案 0 :(得分:1)

那是因为在AJAX函数返回之前循环已经完成。

将第二个AJAX函数更改为:

$.getJSON("inc/API.php", {
        command:"get_distributors", 
        region_id: result[i].region_id
    },
    function(result){
        for(var j=0; j<result.length; j++){
            var id = "#div_region_"+ result[j].region_id; //assuming that's how the data is structured
            $(id).append(result[j].distributor_name+"</br>");
        }
    });