0

所以这是问题所在:

我正在为每个帖子循环一个 AJAX 调用。这个想法是从 ajax 调用中获取 True 或 False。但我认为循环比 ajax 调用更快,我只得到一个结果。该结果也适用于其他帖子,因此我得到的不是其他帖子的错误,而是正确的。有没有办法让循环等到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 中的 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 回答