2009-06-03 3 views
2

最近、PrototypeからjQueryに切り替えると、いくつかの基本的な問題に苦しんでいます。jQueryでグローバルなajaxイベントとしてローカルの両方を実行する方法は?

私はアプリケーションでいくつかのAJAX要求を使用します。これらの要求の95%について、ロードインジケータの表示や非表示など、いくつかのグローバルイベントを実行したいと考えています。グローバル機能とは別に、すべてのリクエストには完了後に実行されるカスタムコードが必要です。

一度設定すると、グローバルなものをオーバーライドするローカルのように思えます。例えば、以下のコードを参照してください。この特定のケースで

// global events 
$('#loader').bind('ajaxStart', function() { 
    // in this particular example, the ajaxStart() works fine, 
    // as it has not been overridden 
    Loader.enable(); 
}).bind('ajaxComplete', function() { 
    // this section will not execute. when the local complete() 
    // is removed, it will execute just fine 
    Loader.disable(); 
}); 

// local ajax event 
$.ajax({ 
    type: $(element).attr('method'), 
    url: $(element).attr('action'), 
    data: $(element).serialize(), 
    global: 'true', 
    complete: function(data) { 
     if (params.target && $('#' + params.target)) { 
      $('#' + params.target).html(data.responseText); 
     } 
     Behaviour.apply(); 
}); 

を、ローカル完全な()イベントが実行からグローバルajaxComplete()イベントを停止するように思われます。

ローカルとグローバルの両方のAjaxイベントを実行する方法はありますか?

答えて

0

まず第一に、ありがとうございました返信両方とも、私のコードの時間と時間を再評価するために少なくとも私を助けました。

問題と解決策は非常に簡単であることが判明:私の地元のcompleteイベントに呼ばれていた

Behaviour.apply();は、グローバルajaxComplete()イベントを無効に正しく効果的に終了するcomplete()防止機能を、他の場所でエラーを引き起こしました。このエラーを修正すると、私の問題も解決しました。

これは、jQueryの両方ローカルとしてグローバル AJAXイベントを組み合わせてサポートすることを意味します。

3

私はそれを試していないが、なぜあなたはグローバルメソッド作成されていません。

function globalAjaxComplete(data) 

をし、グローバルとローカルイベントハンドラの両方からそれを呼び出しますか?

また、「ajaxEnabledを」クラスを定義し、これを行うことができます:

$(".ajaxEnabled").bind("ajaxStart", 
    Function() { globalAjaxComplete(); }); 

次にあなたがグローバルメソッドを毎回呼び出す必要はありません。

ただし、ローカルバインディングがグローバルなバインディングをキャンセルする理由はまだわかりません。

+1

私はこれをまだ試していませんが、間違いなく動作します。これは、私のコードを実際には改善しないAJAXリクエストごとにこの構造体を使用する必要があります。 –

4

コードを実行しようとしました。欠落した}を追加しました。しかし、。魅力のように働いた。通話の順で行われました。

  1. ajaxStart
  2. 完全
  3. ajaxComplete

ここでは、私がやったことです:

// local ajax event 
$.ajax({ 
    ... 
    global: 'true', 
    complete: function(data) { 
     ... 
    } 
}); // <=== This line here 
+0

エラーは修正されましたが、間違った貼り付けが原因でした。これは私の問題を解決しません。 –

関連する問題