2017-12-04 4 views
0

私はこのことについて間違っていることを理解できません。 whileループでAJAX関数を実行して、ドロップダウンから選択した人数のPHPファイルからデータを取得しています。jquery ajax whileループが奇妙な順番に

$(document).on('change', '#attendingCount', function() { 
    $(".person-container").html(""); 
    var amount = $(this).val(); 
    var i = 0; 

    while (i < amount) { 
    getPerson(i); 
    i++; 
    } 
}); 

getPerson(0); 

function getPerson(e) { 
    $.ajax({ 
    type: 'post', 
    url: './person.php', 
    data: { 
     "amount": e 
    }, 
    success: function(data) { 
     $(".person-container").append(data); 
    }, 
    error: function() { 
     console.log('error'); 
    } 
    }); 
} 

結果が汲み出されると、それらの順序は完全にランダムになります。 私は間違って何をしているのですか?

+2

AJAXはお待ちしています...待っています...非同期!あなたがリクエストした順番で回答を受け取るという保証はありません。 –

+2

私はAJAXコールを使用してすべての人を取得しません。代わりに、必要なユーザー数のJSON配列を返し、コンテナにロードします。 – LinkinTED

+2

あなたは本質的に間違って何もしていない、問題はAJAX呼び出しが非同期であるためです。つまり、データを送信するのにかかる時間、サーバーが各要求を処理する時間、および応答の送信に要する時間に応じて、要求を順番に送信することができます。あなたが要求を*受け取った順番に受け取る必要がある場合、それらを順番に連鎖する必要があります。さらに、すべてのデータを1回のリクエストで送信してください。 –

答えて

0

AJAXは非同期で動作しますが、最初に送信したリクエストが最初にデータを返すことは必ずしも必要ではありませんが、それが問題です。 whileループでAJAX呼び出しを行うのは最善の解決策ではありません。