2009-07-28 6 views
42

は、私が表示したり、Ajaxの状況に応じて、プログレスバーを非表示にサイトのドキュメントのいくつかのAJAX呼び出しを持って呼び出す特定アヤックスに.ajaxStart()を呼び出す方法を

$(document).ajaxStart(function(){ 
     $('#ajaxProgress').show(); 
    }); 
    $(document).ajaxStop(function(){ 
     $('#ajaxProgress').hide(); 
    }); 

私は基本的にoverwirteしたいと思いますこれらのメソッドは、多くの素早く小さなajax呼び出しが行われ、進捗バーが出入りする必要がないサイトの他の部分にあります。私はそれらを他の$ .getJSONと$ .ajax呼び出しに添付しようとしています。私はそれらを連鎖しようとしましたが、明らかにそれは良いものではありません。

$.getJSON().ajaxStart(function(){ 'kill preloader'}); 

答えて

35

::コードは次のようなものに見えるかもしれあなたが一時的に前にのバインドを解除することがありますサイトの他の部分で次に

$(document).bind("ajaxStart.mine", function() { 
    $('#ajaxProgress').show(); 
}); 

$(document).bind("ajaxStop.mine", function() { 
    $('#ajaxProgress').hide(); 
}); 

を、あなたの.json呼び出し:答えを探しながら

$(document).unbind(".mine"); 

hereからアイデアを得ました。

EDIT:私はそれをテストする時間がありませんでした。

+0

$(document).unbind( "。mine"); JSON呼び出しの前に、後で名前空間を正しく再バインドするにはどうすればよいですか? – SchweizerSchoggi

+0

これはjquery1.8でこれ以上使用できません。 – CyberNinja

+0

動作しません。何もトリガーされません。 – nights

3

残念ながら、ajaxStartイベントにアニメーションを表示するかどうかを決定するために使用できる追加情報はありません。

とにかく、ここに1つのアイデアがあります。あなたのajaxStartメソッドで、200ミリ秒後にアニメーションを開始してみませんか? ajaxリクエストが200ミリ秒で完了すると、アニメーションは表示されません。それ以外の場合はアニメーションが表示されます。あなたがajaxStartとajaxStop使用してカスタム名前空間バインドでき

var animationController = function animationController() 
{ 
    var timeout = null; 
    var delayBy = 200; //Number of milliseconds to wait before ajax animation starts. 

    var pub = {}; 

    var actualAnimationStart = function actualAnimationStart() 
    { 
     $('#ajaxProgress').show(); 
    }; 

    var actualAnimationStop = function actualAnimationStop() 
    { 
     $('#ajaxProgress').hide(); 
    }; 

    pub.startAnimation = function animationController$startAnimation() 
    { 
     timeout = setTimeout(actualAnimationStart, delayBy); 
    }; 

    pub.stopAnimation = function animationController$stopAnimation() 
    { 
     //If ajax call finishes before the timeout occurs, we wouldn't have 
     //shown any animation. 
     clearTimeout(timeout); 
     actualAnimationStop(); 
    } 

    return pub; 
}(); 


$(document).ready(
    function() 
    { 
     $(document).ajaxStart(animationController.startAnimation); 
     $(document).ajaxStop(animationController.stopAnimation); 
    } 
); 
13

あなたはそれがよだけ自体、バインド時に適切なAjaxのアクション扱うあなたの機能でこれを置く場合:さらに

$('#yourDiv') 
    .ajaxStart(function(){ 
     $("ResultsDiv").hide(); 
     $(this).show(); 
    }) 
    .ajaxStop(function(){ 
     $(this).hide(); 
     $(this).unbind("ajaxStart"); 
    }); 
+0

ありがとう!あなたの答えは最も簡単に実装することがわかります。 –

+2

これは機能しますか?自分のセレクタでajaxStartを使用できますか?ドキュメントから: 'jQuery 1.8の時点で、.ajaxStart()メソッドはドキュメントにのみ添付しなければなりません。 ' –

+0

jQuery 1.8 **後は**動作しません。 –

4

をあなたは.ajaxStart().ajaxStop()無効通話する場合は、あなたが設定することができますあなた.ajax()リクエストでfalseglobalオプション;)

はもっとここを参照してください:How to call .ajaxStart() on specific ajax calls

+0

これは正解でなければなりません。すべてのコードを変更せずに、特定の要求に対してプログレスバーが表示されないようにすることができます。 – mamashare

0

何をすべきかを決める前にリクエストを見比べたい場合は、ajaxSendとajaxCompleteを使用します。ここに私の返事を参照してください:https://stackoverflow.com/a/15763341/117268

0
<div class="Local">Trigger</div> 

<div class="result"></div> 
<div class="log"></div> 

$(document).ajaxStart(function() { 
$("log")text("Trigger Fire successfully."); 
}); 

$(".local").click(function() { 
$(".result").load("c:/refresh.html."); 
}); 

ちょうどあなたは、ユーザーがローカルクラスで要素をクリックすると、Ajaxリクエストがログメッセージが表示され、送信されたいくつかのidea.Whenを取得し、この例を通過します。

0

私には解決策があります。 showloaderというグローバルjs変数を設定します(デフォルトではfalseに設定されています)。あなたがajax呼び出しを行う前に、ローダーを表示したい機能のどれかをtrueに設定するだけです。

function doAjaxThing() 
{ 
    showloader=true; 
    $.ajax({yaddayadda}); 
} 

次に私は私の頭のセクションで次のようにしています。

$(document).ajaxStart(function() 
{ 
    if (showloader) 
    { 
     $('.loadingholder').fadeIn(200); 
    } 
});  

$(document).ajaxComplete(function() 
{ 
    $('.loadingholder').fadeOut(200); 
    showloader=false; 
}); 
3

使用ローカルスコープのAjaxイベント

   success: function (jQxhr, errorCode, errorThrown) { 
        alert("Error : " + errorThrown); 
       }, 
       beforeSend: function() { 
        $("#loading-image").show(); 
       }, 
       complete: function() { 
        $("#loading-image").hide(); 
       } 
です
4

optionsオブジェクトに属性があります。.ajax()は、グローバルと呼ばれるものを取ります。

falseに設定すると、コールのajaxStartイベントはトリガーされません。

$.ajax({ 
     url: "google.com", 
     type: "GET", 
     dataType: "json", 
     cache: false, 
     global: false, 
     success: function (data) {