如何在循环中依次嵌套ajax回调函数?

时间:2015-04-07 20:47:20

标签: jquery loops callback nested-loops

我已经被这个问题困住了几天了。 该程序需要通过一系列3个ajax调用从2个不同的xml文件中提取信息。第一个ajax调用从xml文件中获取数据,并根据具体情况,使用另一个嵌套的ajax调用从另一个文件中提取信息。然后第三个回调函数将通过另一个嵌套的ajax调用从第一个xml文件中提取更多信息 我的问题是,当第一个回调函数被触发并且我使用each()函数解析文件时,它会先触发循环结束然后触发第二个ajax及其相关的回调函数等...我认为不同的ajax调用和函数是正确嵌套的,但它不会像我在控制台日志中那样连续处理。 我希望我在这里足够清楚 谢谢你的帮助和建议!!! 这是代码:

//调用Ajax来获取xml生成的文件

    $.ajax({
        url: 'orders1.xml',
        type: 'GET',
        datatype: 'xml',
        success: function(xml) {
                                 console.log("Call successful ! Parsing XML...");

                                 parseorders(xml);

                                     },
                                 error: function() {
                                        alert( "Sorry, there was a problem!" );
                                    }
                                     }); 



    function parseorders(xml) {

        $('Orders_id', xml).each(function(i){
            var ordersnum = $(this).attr("Orders_number");
            var customer_number = $(this).find("customers_id").text();
            var datemade = $(this).find('date_made').text();
            var delivery = $(this).find('delivery').text();
            var pickup = $(this).find('pickup').text();

            console.log(i);

            $.ajax({
                type: "GET",
                url: "business.xml",
                dataType: "xml",
                success: function(xml) {
                console.log("Call successful ! Parsing XML...");
                parsebusiness(xml);

                                     }
                    });      



            function parsebusiness(xml) {

                $("businessname", xml).each(function(j) {    

                    var cust = $(this).find('customers_id').text();
                    if (cust === customer_number) {
                    console.log(j);
                    businessnam = $(this).attr('name');
                    lastname = $(this).find('lastname').text();
                    address = $(this).find('address').text();
                    city = $(this).find('city').text();
                    zip = $(this).find('zip').text();
                    phone = $(this).find('phone').text();


                    $('<div></div>').attr('id','reportm' + i).appendTo('#report');
                    $('#reportm' + i ).html( "<br /> <br /> Business: " + businessnam + " <br /> Contact person: " + lastname + "<br /> Address: " + address + "<br /> City: " + city + " <br /> Zip:  " + zip + "<br /> Phone: " + phone + "<br /> Deliver: " + delivery + "<br /> Pick-up: " + pickup + "<br />  Date: " + datemade +"<br /> <br /> <table border='1'> <tbody> <tr> <th> Quantity </th> <th> Item </th> <th> Tax </th> <th> Total </th> </tr>  ");





                    $.ajax({
                        url: 'orders1.xml',
                        type: 'GET',
                        datatype: 'xml',
                        success: function(xml) {
                               console.log("Call successful ! Parsing XML...");

                                 parseorders1(xml);
                                              }
                        }); 

                    function parseorders1(xml) {

                        $('transactions', xml).each(function(m){

                            var orde = $(this).find("Orders_id").text();
                            console.log(orde);
                            if (orde == ordersnum) {
                            var name = $(this).find('name').text();
                            var quantity = $(this).find('quantity').text();
                            var tax = $(this).find('tax').text();
                            var total = $(this).find('total').text();

                            $('<div></div>').attr('id','reportd' + m + i).appendTo('#reportm' + i );  
                            $('#reportd' + m + i ).html("<tr> <td> " + name + "</td> <td> " + quantity + "</td> <td> " + tax + "</td> <td> " + total + " </td> </tr> ");
                                                      }
                                                      });

                                              }


            $('<div></div>').attr('id','reporte').appendTo('#reportd'+ m + i );    
            $('#reporte').html("</table> <br /> <br />");    



                                          }           

      });

}






});

    }

1 个答案:

答案 0 :(得分:0)

实际上循环正在运行。我有一个错误的变量名称为其中一个xml指针。

现在几乎正在工作,表格格式只是一个小问题。