2012-03-21 5 views
1

私はずっとこのようなAJAXローダー持っている:私は本当のshowSpinner =を初期化し、私の定期的なAJAX呼び出しの直前にfalseに設定How to show loading spinner in jQuery?AJAX呼び出しのbeforeSendイベントを無効にする方法はありますか?

アップデート

後に編集:

$('#loadingDiv') 
    .hide() // hide it initially 
    .ajaxStart(function() { 
     if(showSpinner == true){ 
      $(this).show(); 
     } 
     else{ 
      showSpinner = true; 
     } 
    }) 
    .ajaxStop(function() { 
     $(this).hide(); 
    }) 
; 

からの。それはほとんどの時間で動作しますが、時にはスピナーがその時に表示されません。私はshowSpinnerの値をポーリングしていますが、それが設定されてからtrueに戻されるまでの間に、falseのままであるように見えます。

これは素晴らしく機能しますが、15秒ごとに実行される定期的なajax呼び出しもあります。そのためにajaxローダーを表示したくありません。私はこれを試してみた:

showSpinner = false; 

// make ajax call to the database to check for new photos 
$.ajax('/url', { 
    type:"post", 
    data: data, 
    success: function(response){ 
    } 
}); 

、それが表示され、スピナーを防ぐことができますが、時にはそれはあまりにも(それが正常に動作し、他の回)を呼び出し、他のAJAXのためのスピナーを無効にします。私はスピナーのbefore-enableへの再有効化を試みましたが、それは助けにはなりませんでした。上記のコードを実行するsetInterval呼び出しが削除されると、問題が修正されます。

私の他の選択肢は、Ajax呼び出しが発生するたびにスピナーを含めることですが、私はもっと一般的な解決策を望みます。誰もこれを回避する方法を知っていますか?

ありがとうございました。

+0

私は答えはありませんが、メモを取っておきたいことがあります - > http://blog.jqueryui.com/2011/09/jquery-ui-1-9-milestone-6-spinner- 2/ – SpYk3HH

+0

これは、いつでも複数のajax呼び出しを処理できるためです。 'async:true'を宣言することによって、次のajaxリクエストは、最初のリクエストが終了するまでロードを待機する必要があります。これはあなたの機能に関する問題を止めるべきであり、そのajax関数によって返されたデータが巨大でない限り、何の問題も起こらないはずです。 – Ohgodwhy

+0

私はasync:trueがデフォルトであると思う。私はそれをfalseに設定しようとしましたが、ブラウザをロックするようです。 – ContextSwitch

答えて

1

これは同じではないにしても、非常によく似ています。my own question about disabling certain ajax event handlersです。 This answerが役に立つかもしれません。

+0

これは私の必要とするもののようですが、設定オブジェクトはajaxStart呼び出しに送られないようです。ここにajaxStart:http://jsfiddle.net/RjmSx/7/ ajaxErrorと比較して:http://jsfiddle.net/RjmSx/8/ – ContextSwitch

+0

私はajaxStartの代わりにajaxSendを使用して終了しました。 – ContextSwitch

関連する問題