11

私はいくつかのJavaScriptを持っています:

surveyBusy.show();

$.getJSON(apiUrl + '/' + id)
    .done(function (data) {
        ...
        surveyBusy.hide();
    })
    .fail(function (jqXHR, textStatus, err) {
        ...
        surveyBusy.hide();
    });

ただし、ミリ秒以上かかるsurveyBusy.show();場合にのみ発行したいと思います。そうしないと、ちらつきが発生します。これを実行できる APIのコールバックはありますか? ドキュメントには何も表示されません。$.getJSONngetJSON

4

7 に答える 7

0

これにより、window オブジェクトの下にメソッドを作成する必要がなくなり、surveyBusy オブジェクト内にメソッドが設定されsetTimeoutます。それはあなたにもっと再利用可能なものを与えます!!

surveyBusy = {
    onTimer: function(n) {
        elapsed = new Date.getTime() - start;
        if (elapsed > n) surveyBusy.show();
    }
}
surveyBusy.hide();
var start = new Date().getTime();
var elapsed = 0;

$.getJSON(apiUrl + '/' + id)
    .done(function (data) {
        ...
    })
    .fail(function (jqXHR, textStatus, err) {
        ...
    })
    .always(function() {
        surveyBusy.onTimer(5000);
    });
于 2013-08-09T13:45:56.440 に答える
0

タイムアウトを設定してから、サーバーが応答したときにキャンセルしてみてください。

// NOT TESTED

var n = 5000 // milliseconds
var tmr = setTimeout(function(){
    surveyBusy.show();
}, n);

$.getJSON(apiUrl + '/' + id)
    .done(function (data) {
        ...
        clearTimeout(tmr) ;
        surveyBusy.hide();
    })
    .fail(function (jqXHR, textStatus, err) {
        ...
        clearTimeout(tmr) ;
        surveyBusy.hide();
    });
于 2013-08-09T13:36:05.833 に答える
0

使用setTimeout:

var busy = window.setTimeout(function(){
    surveyBusy.show();
}, 1000);

$.getJSON(apiUrl + '/' + id)
    .done(function (data) {
        // ...
        window.clearTimeout(busy);
        surveyBusy.hide();
    })
    .fail(function (jqXHR, textStatus, err) {
        // ...
        window.clearTimeout(busy);
        surveyBusy.hide();
    });
于 2013-08-09T13:34:46.463 に答える
0

実際、すべての AJAX ルーチンのコールバックについて説明しているこのページによると、使用できるタイムアウト コールバックがあります。$.getJSONショートカットを使用しないことが必要になります。したがって、質問に対する本当の答えを提供するには、はい、API にあります$.getJSONが、ショートカットよりも深く埋もれています。

timeoutタイプ: 数値 リクエストのタイムアウト (ミリ秒単位) を設定します。これは、$.ajaxSetup() で設定されたグローバル タイムアウトをオーバーライドします。タイムアウト期間は、$.ajax 呼び出しが行われた時点から始まります。他のいくつかのリクエストが進行中で、ブラウザに利用可能な接続がない場合、リクエストが送信される前にタイムアウトになる可能性があります。jQuery 1.4.x 以下では、リクエストがタイムアウトした場合、XMLHttpRequest オブジェクトは無効な状態になります。オブジェクト メンバーにアクセスすると、例外がスローされる場合があります。Firefox 3.0+ のみで、スクリプトと JSONP リクエストはタイムアウトでキャンセルできません。タイムアウト期間後に到着した場合でも、スクリプトは実行されます。

于 2013-08-09T14:29:48.310 に答える
-1
var n = 1000; //number of ms to wait
var done = false;
window.setTimeout(function(){
    if(!done){
        surveyBusy.show();
    }
}, n);

$.getJSON(apiUrl + '/' + id)
    .done(function (data) {
        ...
        done = true;
        surveyBusy.hide();
    })
    .fail(function (jqXHR, textStatus, err) {
        ...
                done = true;
        surveyBusy.hide();
    });
于 2013-08-09T13:34:38.593 に答える