1

私はajax関数を呼び出すつもりで、APIを調べていました。成功、エラー、完了などが呼び出されるのを待っている間に実行できる関数があるかどうか興味がありました。

私は次のようなものがあることを望んでいました:

$ .ajax({...、waiting:function(){//コードを実行する}});

まだそこにない場合は、本当にそうすべきです。ajax関数が呼び出される前にそのようなものを運ばなければならないことは私の心の中でそれほど賢くはありません...

待機すると、読み込み中のgifを表示するなどの操作を簡単に実行できます。

この種の機能を実行するものはありますか?見つからないようです。

4

5 に答える 5

3

呼び出し後に持っているコードは、$.ajax実際には呼び出しが開始された直後に実行を開始します。だからあなたがこのようなものを持っているなら:

$ajax('someurl').done(function() { /*** success function ***/ });
someOtherFunctionCall();

someOtherFunctoinCall()実際には、ajax呼び出しが開始された直後に実行され、呼び出しの成功/失敗に関係なく発生します。

于 2012-09-07T16:26:06.390 に答える
3

これを試して

jQuery.ajax({
    url:"http://www.example.com/",
    beforeSend:function(){
        //show loading gif
    },
    success:function(resp){
        //handle response from server
        //hide or remove loading gif
    },
    error:function(msg){
        //show error message
    }
});
于 2012-09-07T16:28:59.323 に答える
2

リクエストを開始すると同時に、読み込み中のGIFを表示する必要があります。を除いて、AJAX呼び出しの実際の進行状況を知る実際の方法はありません。それが目的です(プレーンJSでは、jQueryでの同等readyStateのものが何でonreadystatechangeあるかはわかりません/気にしません)。

于 2012-09-07T16:21:34.123 に答える
2

ajax呼び出しが終了するまで、スピナーを表示するのは簡単です。これがどのように行われるかの例です:

loading = {
    count: 0
};

loading.finish = function() {
    this.count--;
    if (this.count==0) this.$div.hide();
};

// 
loading.start = function() {
    this.count++;
    if (!this.$div) {
        var html = '<div style="position: fixed;z-index:100;left:0;top:0;right:0;bottom:0;background: black;opacity: 0.6;">';
        html += '<table width=100% height=100%>';
        html += '<tr><td align=center valign=middle>';
        html += '<img src=img/loading.gif>';
        html += '</td></tr>';
        html += '</table></div>';
        this.$div=$(html);
        this.$div.prependTo('body');
    }
    setTimeout(function(){
        if (loading.count>0) loading.$div.show();
    }, 500);
};

// the function to call
askUrl = function(url, success) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                success(msg);
            }
            loading.finish();
        }
    };
    loading.start();
    httpRequest.open('GET', url);
    httpRequest.send();
};

askUrlを呼び出しても、サーバーが500ミリ秒以内に応答しない場合、画面は灰色になり、スピナーが表示されます。

これは短いコードであり、実際には目的の結果に依存するため、これがjQueryまたはプラグインでさえ利用可能であるかどうかはわかりません。

ここでgifスピナーを入手しました。

于 2012-09-07T16:23:46.337 に答える
1

最善のアプローチは、ajaxリクエストにbeforeSend関数とcomplete関数を使用することです。

$.ajax({
          .. Your ajax settings..
          success : function(result){
             // do what you want with data here
          },
          beforeSend : function(){
            // Show a ajax gif here
          },
          complete : function(){
            // Hide the ajax gif here
          }
    });

beforeSend関数は、ajaxリクエストが送信されるとすぐにヒットします。success関数が終了すると、complete関数がトリガーされます。したがって、リクエストが完了したときにユーザーに通知できます。

于 2012-09-07T16:33:21.353 に答える