0

複数のfromが取り込まれる div#notification-dataがあります。$(document).ready<li></li>$.post

$.postthen が呼び出されるので、setTimeout(poll_n,9000);データは最新です。

したがって、毎回すべてのデータを更新するわけではありません。 に<li></li>既に存在するかどうかを確認したいと思います。#notification-data存在しない場合は、 にprepend()#notification-dataます。

データは次の形式で提供されます。

<li id="new_notification_1" class="seen_0 li_notification">blah</li>
<li id="new_notification_2" class="seen_0 li_notification">bleh</li>

追加の質問として、これは長いポーリングの正しい方法ですか?

これが私のコードです:

function poll_n(){
        $.post('<?php echo $siteUrl ?>notifications.php?x=' + (new Date()).getTime() +'', function(data) {

            $(data).find(".li_notification").each(function () {

                    var li_id = $(this).attr('id');
                    if ($(li_id).closest('#notification-data').length) {
                        //do nothing
                    } else {
                        $('#notification-data').append(??not_sure_what_goes_here??);  // process results here           
                    }

            });

            setTimeout(poll_n,9000);
        }); 
    }

編集 - 回答後、これを取得しましたが、機能しません(コンソールに何も表示されません)。

success: function(data){

    $(data).find(".li_notification").each(function() {              
            var id = $(this).attr('id'),
                notification = $('#notification-data');
                console.log(id);
                console.log('hello');
            if (notification.find('#' + id).length === 0) {
                // notification doesn't exists yet then lets prepend it
                notification.prepend('#' + id);
            }

    });

},
4

1 に答える 1

1

You can try this:

function poll_n() {
$.ajax({
    type: 'POST',
    url: 'your url',
    success: function(data){
        var notification = $('#notification-data');
        $.each($(data), function(){
            var id = this.id;
            if (notification.find('#' + id).length === 0) {
                // notification doesn't exists yet then lets prepend it
                notification.prepend(this);
            }
        });
    },
    complete: function(jqXHR, status) {
        if (status === 'success') {
            setTimeout(poll_n, 9000);
        }
    }
});
}

You must call poll_n() again after the request has been completed.

于 2013-04-30T15:14:09.350 に答える