3

レコードのタイムスタンプをチェックするための長いポーリング関数を実装したページがあるので、データが編集されている場合は更新されます。

<script type="text/javascript">
var poll_url = 'http://mysite.com/poll/;
var my_ts = <?php $_SESSION['template_timestamp']; ?>;
(function poll(){
    $.ajax({ 
        url: poll_url,
        type: 'post',
        success: function(data){
            if ((data.ts > 0) {
                // check if expired
                if (data.ts > my_ts) {
                    // it has expired, so reload the page
                    $("#dialog-message").html('Record has been edited.');
                    // show popup
                    $("#dialog-message").dialog({
                        modal: true,
                        buttons: {
                            Reload: function() {
                                $(this).dialog("close");
                                $('#pleaseWait').show();
                                window.location.href = '/records/overview';
                            }
                        }
                    });
                }
            } else {
                // is still null
                console.log('error');
            }
        }, 
        dataType: "json", 
        complete: poll, timeout: 30000 
    });
})();
</script>

私が抱えている問題は、JS ajax呼び出しを呼び出す別のアクションもあることです。このアクションが呼び出されると、長いポーリング機能を強制的に停止します。
これを行う方法はありますか?

4

1 に答える 1

5

次のSOの質問が答えを提供するかもしれません... jQueryを使用してAjaxリクエストを中止します

それをコードスニペットに適用すると、次のようなものが得られる可能性があります...

<script type="text/javascript">
var poll_url = 'http://mysite.com/poll/';
var my_ts = <?php $_SESSION['template_timestamp']; ?>;
var poll_xhr;

(function poll(){
    poll_xhr = $.ajax({ 
        url: poll_url,
        type: 'post',
        success: function(data){
            // Code removed
        }, 
        dataType: "json", 
        complete: poll, 
        timeout: 30000 
    });
})();

// To kill the AJAX request, put this where it makes sense
poll_xhr.abort();
</script>
于 2012-10-22T14:55:00.183 に答える