0

ここに問題があります:

投稿ごとに AJAX 呼び出しをループしています。アイデアは、ajax 呼び出しから True または False を取得することです。しかし、ループは ajax 呼び出しよりも高速で、1 つの結果しか得られないと思います。その結果は他の投稿にも適用されるため、他の投稿で false を取得する代わりに、true を取得します。ajax 呼び出しが完了するまでループを待機させる方法はありますか?

function changMonth(month, active, url){
$('#eventTimeline').empty();

$('#month1, #month2, #month3, #month4, #month5, #month6, #month7, #month8, #month9, #month10, #month11, #month12').removeAttr('class');

$(active).attr('class', 'active');

base_url = $('#base_register').val();
user_id = $('#user_id').val();

$.post(url, {'month': month} , function(data){

    for(var i = 0; i < data.length; i++)
    {
        var splitDateString = new String(data[i].event_date);
        var splitDateArray = splitDateString.split('-');

        $.post(base_url + '/searchFilter/getRegisteredParents', {'event_id' : data[i].event_id}, function(data2){

            checkboolean = data2.check;
            ajaxFinnish = true;

        }, "json");

        if(ajaxFinnish == true)
        {

        $('#eventTimeline').append(

            '<div class="post' + i + '">' +
            '<h3>' + data[i].event_name + '</h3>' +
            '<div class="eventImage"><img width="113px" height="113px" src="' + data[i].event_photo + '" alt="&nbsp;" /></div>' +
            '<div class="eventText">' + data[i].event_details + '</div>' +
            '<div class="klas"><span>' + splitDateArray[2] + ' ' + maandArr[splitDateArray[1]] + '</span>' + data[i].group + '</div>' +
            '</div>'

        );

        $(".post" + i).css({'width': '605px', 'background-color': '#FFFFFF', 'border-bottom': 'solid 1px #4c585e', 'margin': '10px 5px 5px 5px', 'overflow': 'hidden' });


            if(checkboolean == "true")
            {
                //console.log('TRUE');
                $(".post" + i).append('<a href="#" class="eventMore">Uitschrijven</a>');
            }
            else
            {
                //console.log('False');
                $(".post" + i).append('<a href="#" class="eventMore">Inschrijven</a>');
            }
            ajaxFinnish = false;
        }


        console.log(checkboolean);
    }

}, "json");}
4

2 に答える 2

1

あなたのコードを詳しく見なくても、あなたの説明から、これが起こっている理由は AJAX: Asynchronous の A によるものであることがわかります。

AJAX 呼び出しはサーバーへの呼び出しを行い、それが行われている間、残りのコードは引き続き実行されます。このため、ほとんどの場合、JS は AJAX 呼び出しの前に終了します。必要なことは、.done()関数にコールバックを実装することです。コールバックを使用することは、コードが希望する順序で実行されることを保証する唯一の信頼できる方法です。

function myCallback(response) {
    console.log(response);
}

function myAjaxCall(myUrl, myData) {
    $.ajax(myUrl, {data: myData }).done(myCallback);
}
于 2012-06-17T18:38:04.227 に答える
0

for ループを待機させることはできません。このシナリオで行う最善の方法は、setTimeout を使用して最初の ajax を呼び出し、その後の呼び出しごとに同じ setTimeout 呼び出しを行うことです。

于 2012-06-17T18:38:43.113 に答える