首页 > 解决方案 > Data download Ajax in Ajax

问题描述

I'm catching data from Database with Ajax. In the second Ajax request I try to put the variables from first Ajax request to the new DOM elements from second request but there the variables have same value from last array possition.

I have no idea why . unfortunately I didn't find the information about that.

a simple example:

    //Firt ajax request
$.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "connect/get-fistinformations.php",
            data: {
                folder_type:folder_type
            },
            dataType: "json",
                for(var first_key in json){
                    var info = json[first_key];
                    //If I put there some alert - alert('some_alert'); - the rest of the code works fine
                    //Catching Data with Json - working correctly
                    var folder_id = info[0];
                    var folder_name = info[1];
                    var folder_date = info[2];
                    folder_id;
                    //Second ajax request
                    $.ajax({
                        type: 'GET',
                        contentType: 'application/json; charset=utf-8',
                        url: 'connect/get-secondinformations.php',
                        data: {
                            folder_type:folder_type,
                            folder_id:folder_id
                        },
                        dataType: 'json',
                        success: function(json){
                            for(var s_key in json){
                                var second_info = json[s_key];
                                //Catching more data from other Data table - working correclty
                                var count = second_info[0];
                                var route = second_info[1];
                                var distance = second_info[2];
                                var price = second_info[3];                                                                                                             
                                var price_per_km = +(price) / (+(route) + +(distance));
                                //Without the alert from the firt ajax request
                                //There inside new elements I try to put variable from first Ajax catching (folder_id, folder_name,folder_date)
                                //But every time when I add new elemets to DOM, these three variables have same value - from last arrray position
                                //For example folder_id = '50' | folder_name = 'Some folder name' | folder_date = '2020-07-04'
                                //New elements for DOM
                                if(count>0){
                                    var full_line_folder =  '<div class="full-line-folder folder">'+
                                                        '<i class="some-line"></i>'+
                                                        '<span class="folder-name">'+folder_name+'</span>'+
                                                        '<span class="folder-comment">Utworzono: '+folder_date+'<br />Pozycje: '+count+'<br />Dystans: '+route+'km<br />Stawka: '+price_per_km+' €/km<br />Puste kilometry: '+distance+'km</span>'+
                                                        '<input type="radio" name="folderid" value="'+folder_id+'" style="display:none;" checked/>'+
                                                    '</div>';
                                    $(full_line_folder).appendTo(point);
                                }else{
                                    var empty_line_folder = '<div class="empty-line-folder folder">'+
                                                                '<i class="empty-line"></i>'+
                                                                '<span class="folder-name">'+folder_name+'</span>'+
                                                                '<span class="folder-comment">Utworzono:'+folder_date+'<br />Pozycje: 0<br />Dystans: 0km<br />Stawka: 0 €/km<br />Puste kilometry: 0km</span>'+
                                                                '<input type="radio" name="folderid" value="'+folder_id +'" style="display:none;" checked/>'+
                                                            '</div>';       
                                    $(empty_line_folder).appendTo(point);
                                }
                            }
                            
                        },
                        error: function(note){
                            alert('error');                         
                        }
                    });
                }
            },
            error: function(note){
                alert('error');
            }
        });

标签: mysqlajax

解决方案


问题是您的第一个循环在数据到达它发出的 ajax 请求之前进行到下一次迭代。大多数情况下,当您的第一个 ajax 响应到达时,循环已经消失,您尝试访问的任何外部变量都将具有它们的最后一个值。

有很多解决方法。我认为讨论不是这个答案的范围。

您的选择:

  1. 正确使用闭包

  2. 使用async/await序列化请求


推荐阅读