5

$ .get()を使用してモーダル内にフルスクリーンをロードするHTMLで構築されたアプリがあります

誰かがアイコンをクリックしてアプリをロードするとトリガーされるロード画面があります。

アプリをクリアして表示する前に、ロード画面を最低2秒間表示したいと思います。

2000ミリ秒実行されるタイマーを開始し、コールバックによって入力された変数をチェックしてnullかどうかを確認し、変数がロードされたときにのみ特定のアクションを続行する、適切で安全な方法はありますか?

whileループでうまくいくことはわかっていますが、遅い日にコンテンツが読み込まれる前に1000回循環する可能性があり、これは非効率的な方法のようです。

答え

$('#testApp').click(function() {
    var twoSecMin = $.Deferred();
    setTimeout(function () { twoSecMin.resolve(); }, 2000);
    $('#appModal').fadeIn(400);
    $.when($.get("/usm/portal/_layouts/monkeysphere/test.aspx"),twoSecMin).then(function (data) {
        $('#appContainer').html(data[0]);
        $('#appContainer').show();
        $('#appModal').fadeOut(200);
    });
});
4

2 に答える 2

9

最新バージョンのjQuery(1.5以降)を使用している場合は、固定タイムアウトでとを$.Deferred作成できます。resolve

var twoSecMin = $.Deferred();
setTimeout(function () { twoSecMin.resolve(); }, 2000);

また、拡張オブジェクトであるjqXHRによって返されたを保存します。$.getDeferred

var ajaxReq = $.get("/usm/test.aspx", ...);

次に、両方を待ちます:

$.when(twoSecMin, ajaxReq).then(function (_, res) {
    // ready...

    var data = res[0];
    // ...
});
于 2012-12-13T07:11:38.530 に答える
1

これを行うには、おそらくasetTimeout(fn, 2e3)を使用できます。

変数がnullかどうかをテストするには、を使用できますyourVariable === null

于 2012-12-13T06:56:23.967 に答える