DOM元素只是偶尔创建,尽管由ajax

时间:2016-11-22 07:52:13

标签: javascript jquery css ajax dom

这是一个非常具体的问题,让我特别困惑。简而言之:我在一个咨询网站上工作,该网站从API获取数据并加载了AJAX。我现在正试图将旧的存档聊天预先加载并在菜单中单击css显示。

问题在于:它有效......但只有大约1/3次或重新加载页面后。我不明白这是怎么回事,要么它应该起作用,要么它不起作用。 我检查过并且数据总是被加载(因为当前的聊天是先打开并始终有效) 那怎么可能呢?

$.ajax({
    type: 'POST',
    url: '/vsbt/counselling/archive/',
    data: {},
}).done(function(data) {
    console.log('ajax /vsbt/counselling/archive/');
    console.log(data);

    //menu is created
    $('#counselling_status').append('<ul class="archivedCounsellings"></ul>');
    $('.archivedCounsellings').append('<h2>Archivierte Chats</h2>')

    for (var i = 0; i < data.length; i++) {
        //menu items are added
        var that = data[i].messages[0].title;
        $('.archivedCounsellings').append('<li class="' + that + '"><a>' + that + '</a></li>')
        $('#vbst_communication_container').prepend($('<div class="counselling inactive ' + that + '" />')
            .append($('<h2>' + that + '<h2>')));

        //the messages are added with to classes for styling
        data[i].messages.forEach(function(message) {
            $("div." + that)
                .append($('<div />')
                    .addClass(message.type)
                    .append($('<p />')
                        .text(message.message)))
        });
        //this doesn't work either, you can maybe tell me why, but that's not the issue
        $('.counselling').data("status", [i]);
    }

    $(".archivedCounsellings").append('<li class="aktuell"><a><br>Zur aktuellen Beratung</a></li>');

    //click event to toggle the displayed counseling
    $('.archivedCounsellings li').click(function() {
        $('.counselling').addClass('inactive');
        $('div .' + $(this).attr('class')).removeClass('inactive');

        //workaround which works, but isn't really acceptable
        // no load workaround
        // if($('.openCounselling').siblings().length == 0){
        //     window.location.reload();
        // }

        // $('.statusDisplay').text($('#job_status_' + $(this).attr('class')).data("status"));
        // console.log($('div .' + $(this).attr('data-status')));
    });

PS。我知道咨询中的拼写错误&#39;
PPS。如果你发现一个明显使它失败的错误,那么在复制时可能会发生这种错误,请记住,它确实有效。

1 个答案:

答案 0 :(得分:1)

好的,如果有人遇到这个问题:我刚刚解释了AJAX更接近,基本上AJAX或多或少同时发出所有请求。无论在完成功能中发生什么,都会发生,因此成功的数据请求。 我所做的是在不同的功能中启动所述元素的容器。所以偶尔会有一点慢,而且没有地方可以将我的元素追加到 - &gt;没有错误,什么也没发生。 任何人都不太可能看到这一点,因为它非常具体,但也许这会帮助某人,至少我现在知道得更好