Php Jquery中的每个函数都不符合顺序

Php Jquery中的每个函数都不符合顺序,php,jquery,ajax,Php,Jquery,Ajax,为什么在使用每个循环时,返回值的顺序不同 我有一个php代码 $selectedYear = 2018; $months = array ( 0 => 'January', 1 => 'February', ... 11 => 'December' ); 现在,foreach$months我想创建具有不同值的新行()。 我正在使用AJAX来实现它,比如: var selectedYea

为什么在使用每个循环时,返回值的顺序不同

我有一个php代码

 $selectedYear = 2018;
 $months = array (
         0 => 'January',
         1 => 'February',
         ...
         11 => 'December'
        );
现在,foreach
$months
我想创建具有不同值的新行(
)。 我正在使用AJAX来实现它,比如:

var selectedYear = <?= json_encode( $selectedYear ) ?>;
var month= <?= json_encode( $months); ?>;

$(month).each(function(k)
        {
            $.ajax({
                type      : 'POST',
                url       : 'scripts/ajax-monthTr.php',
                data      : {month: k, selectedYear: selectedYear},
                beforeSend: function()
                {
                    $('.preloader').css('display', 'block');
                },
                success   : function(data)
                {
                    $('#newTr').append(data);
                    $('.preloader').css('display', 'none');
                }
            }); // end ajax
        });

for(变量i=0;i
这是因为每个ajax调用的结果以不同的间隔返回数据。你可以:

1) 或者在调用ajax函数之前追加数据

2) 或者,在每个ajax函数中添加新行后,根据id属性对tr元素进行排序

 var items = $('#newTr tr');
 items.sort(function(a, b){
   return $(a).attr('id') - $(b).attr('id');
 });

 items.appendTo('#newTr');

这是因为每个ajax调用的结果以不同的间隔返回数据。你可以:

1) 或者在调用ajax函数之前追加数据

2) 或者,在每个ajax函数中添加新行后,根据id属性对tr元素进行排序

 var items = $('#newTr tr');
 items.sort(function(a, b){
   return $(a).attr('id') - $(b).attr('id');
 });

 items.appendTo('#newTr');

您正在执行一个从月份i获取数据的请求,而无需等待从请求获取月份i-1的响应。假设您发出从第1个月获取数据的请求,那么您不必等待对此请求的响应,而且您还发出了第2个月的请求,也许第2个月的响应可以在第1个月的响应之前到达。还可以看看这项技术:

您正在执行一个请求以从月份i获取数据,而无需等待请求的响应以获取月份i-1。假设您发出从第1个月获取数据的请求,那么您不必等待对此请求的响应,而且您还发出了第2个月的请求,也许第2个月的响应可以在第1个月的响应之前到达。还可以看看这种技术:

看起来您希望AJAX调用具有同步行为。您的代码正在使用回调函数,因此

success   : function(data)
            {
                $('#newTr').append(data);
                $('.preloader').css('display', 'none');
            }

将在每次发布后触发。这些邮寄电话的到达顺序不取决于您。在所有网络调用完成后,您应该重新考虑执行循环。

看起来您希望AJAX调用具有同步行为。您的代码正在使用回调函数,因此

success   : function(data)
            {
                $('#newTr').append(data);
                $('.preloader').css('display', 'none');
            }

将在每次发布后触发。这些邮寄电话的到达顺序不取决于您。在完成所有网络调用后,您应该重新考虑执行循环。

您是否尝试过:
$(月)。每个(函数(键,值){//code})
问题不是每个
的问题,而是
ajax
调用的问题。因为它们是异步的,所以不会保留顺序。您是否尝试过:
$(月)。each(函数(键,值){//code})
问题不是每个
的问题,而是
ajax
调用的问题。因为它们是异步的,所以不会保留顺序。
success   : function(data)
            {
                $('#newTr').append(data);
                $('.preloader').css('display', 'none');
            }