1. ホーム
  2. ajax

[解決済み] 特定のリクエストに対してajaxStart()およびajaxStop()を無効にする

2023-07-20 23:44:41

質問

.ajaxStart()と.ajaxStop()を使って、ajaxリクエストが行われている間、モーダルを表示させています。(開始と停止の間)

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

私の問題は、longpollingの要求のためだけにこのモーダルを無効にすることにあります...。

ローディングスクリーン(quot;loading screen")のオンとオフのハンドラを登録することです。

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

私のlongpoll関数です。

$.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() にグローバル変数を導入して、関数の最初の行で返すようにしてみましたが、これではローディング画面を完全に殺してしまうようです。

どのようにこれを達成することができるか、何かアイデアはありますか?

どのように解決するのですか?

解決したのですが...

オプション・オブジェクトにある属性 .ajax() と呼ばれるものを取ります。 global .

false に設定すると、このメソッドは ajaxStart イベントをトリガーしません。

$.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
});