2

ajax 呼び出しの後、ファンシー ボックスを閉じることができない場合があります。

 $(document).ajaxStop(function() {
    function(){$.fancybox.close()};
 });

 $(document).ajaxStart(function() {
    $("a#load_gif").trigger('click');
 });

ファンシーボックスを処理する私のコードは次のとおりです。したがって、私の問題は、ajax呼び出しが非常に短くて速い場合、ボックスが閉じないことですが、呼び出しが長くなると、必要に応じて自動的に閉じます。

これに沿った修正を見つけました

$(document).ajaxStop(function() {
    setTimeout(function(){$.fancybox.close()},500);
});

しかし、正直なところ、そのソリューションは見栄えがよくありません。ajax呼び出しが非常に速く返された場合でも、ファンシーボックスを閉じるにはどうすればよいですか? ajax 呼び出しの長さは、フェッチする必要がある行の数によって異なります。

ヘルプや提案は大歓迎です。

4

1 に答える 1

2

競合状態が発生しているようで、AJAX 呼び出しがその close 関数を起動しようとしているときに、fancybox の作成が完了しておらず、その close 関数がまだ定義されていない可能性があります。

ファンシーボックスを閉じるトリガーとなる2段階のプロセスをお勧めします。2 つのグローバル変数ajaxStop = false;を作成し、fancyboxDone = false;

次のような関数を作成します。

function closeFancyBox(){
    if(ajaxStop && fancyboxDone){
        $.fancybox.close();
        ajaxStop = fancyboxDone = false;
    }
}

次に、ajax ストップを次のように変更します。

 $(document).ajaxStop(function() {
    function(){
      ajaxStop = true;
      closeFancyBox()
    };
 });

fancyboxDone = trueそして最後に、ajax Stop と同じことを行いますが、代わりに設定する onComplete 関数を fancybox に追加しますajaxStop

そのため、どちらが 1 位と 2 位で終了しても、お互いのステータスを確認して、適切に終了させることができます。

于 2013-03-28T19:09:06.333 に答える