2017-12-04 5 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 is ..... 기다려 ... 비동기! 요청한 순서대로 응답을받을 것이라고 보장 할 수는 없습니다. –

+2

AJAX 호출을 사용하여 모든 사람을 얻지 않겠습니다. 대신 원하는 사용자 수만큼 JSON 배열을 반환 한 다음 컨테이너에로드하십시오. – LinkinTED

+2

AJAX 호출이 비동기이기 때문에 본질적으로 잘못된 것은 수행하지 않습니다. 즉, 요청을 순서대로 보낼 수 있지만 데이터를 전송하는 데 걸리는 시간, 서버가 각 요청을 처리하는 데 걸리는 시간 및 응답을 전송하는 데 걸리는 시간에 따라 완전히 다른 요청으로 되돌아 갈 수 있습니다 . 요청을 순서대로 수신해야하는 경우 하나씩 순서대로 연결해야합니다. 더 나은 것은 하나의 요청으로 모든 데이터를 전송하는 것입니다. –

답변

0

AJAX는 비동기 방식으로 작동하지만 반드시 보내야하는 첫 번째 요청이 먼저 데이터를 반환 할 필요는 없습니다. 이것이 바로 문제입니다. while 루프에서 AJAX 호출을하는 것이 최선의 해결책은 아닙니다.