1

300ms以上かかるすべてのajax呼び出しでbody要素に「loading」クラスを追加したかったのです。そこで、common.jsファイルに次のスクリプトを追加しました。

$(document).ready(function ()
{
    var timer;
    $("body").on({
        ajaxStart: function ()
        {
            var body = $(this)
            var timer = setTimeout(function ()
            {
                body.addClass("loading");
            }, 300)
        },
        ajaxStop: function ()
        {
            $(this).removeClass("loading");
            clearTimeout(timer);
        }
    });
});

これは、少なくとも1秒の長さでajax呼び出しを行う場合に機能します。それらが即時である場合、ローディングクラスはbody要素に残ります。

最初のajax呼び出しは300msが経過する前に終了し、クラスを削除してタイマーをクリアする必要があると思います。これには10msかかるとしましょう。しかし、その後290ms後にタイマーが起動します...

どうすればそれをテストできますか?そして天気私は上記のタスクを達成するために何か間違ったことをしています。

PS私はASP.NETMVCを使用しています。

4

1 に答える 1

3

変数を再宣言し、以前に宣言された変数のより高いスコープを失います。

$(document).ready(function () {
    var timer;
    $(document).on({
        ajaxStart: function () {
            var body = $(document.body);
            timer = setTimeout(function () { //don't use the "var" keyword
                body.addClass("loading");
            }, 300)
        },
        ajaxStop: function () {
            clearTimeout(timer);
            $(this).removeClass("loading");
        }
    });
});
于 2012-12-01T11:19:54.920 に答える