80

私は .ajaxStart() と .ajaxStop() を使用して、ajax リクエストが行われている間にモーダルを表示しています。(スタートとストップの間)

ここで、このサイトの左上隅にあるような、通知を待ち続ける longpoll 関数を追加したいと思います。

私の問題は、ロングポーリング要求に対してのみこのモーダルを無効にすることにあります..

「ロード画面」のオン/オフ ハンドラの登録:

$(document).ajaxStart(handleAjaxStart);
$(document).ajaxStop(handleAjaxStop);

私のロングポール機能:

$.ajax({
    timeout: 35000,
    url: longPollUrl,
    success: function(data){
        if(data.queCount) $('#numQueCount').html(data.queCount);
        if(data.queAccept) $('#numQueAccept').html(data.queAccept);
    }, 
    dataType: 'json',
    complete: longpoll
});

私は試した:

$().off('ajaxStart');
$().off('ajaxStop');

..ポーリングを開始した後にハンドラーを再接続しますが、喜びはありません。

また、関数の最初の行で返されるグローバル変数を導入しようとしましたhandleAjaxStart()が、ロード画面を完全に殺してしまうようです。

これを達成する方法はありますか?

4

2 に答える 2

198

私はそれを考え出した..

options オブジェクト.ajax()テイクには という属性がありますglobal

ajaxStartfalse に設定すると、通話のイベントはトリガーされません。

$.ajax({
    timeout: 35000,
    url: longPollUrl,
    success: function(data){
        if(data.queCount) $('#numQueCount').html(data.queCount);
        if(data.queAccept) $('#numQueAccept').html(data.queAccept);
    }, 
    global: false,     // this makes sure ajaxStart is not triggered
    dataType: 'json',
    complete: longpoll
});
于 2012-09-27T14:50:52.593 に答える