2011-07-14 7 views
3

私はPHPで書かれたバックエンドとjQueryのフロントエンドを持っている..私は何をしたいか:.ajaxCompleteは、コールバック呼び出しを防止します。出来ますか?

  1. ページはAJAXといくつかのリンクが含まれて呼び出します
  2. PHP(それぞれが、それは自分の成功事例の/エラーコールバックのしています)バックエンドは次のような返事を返すかもしれません:{"must_relogin":true}
  3. このレスポンスを受け取り、他のコールバックを防止するためにいくつかの種類のグローバルAJAXイベントにバインドする必要があります。

は可能ですか?

ありがとうございました。ここにあなたのシナリオわからなく

更新

jQuery(document).ajaxComplete(function(a, b, c){ 
console.log(a, b, c); 
b.abort(); 
return false; }); 
+0

あなたのajaxコールは同期または非同期ですか? – Rafay

+0

それら全てが非同期である –

答えて

0

イムはSOのリンク使用してajax呼び出しを中止について説明し

Abort Ajax requests using jQuery

ある.abortが、呼び出しがある場合すでにサーバーに作成されている.abort既存のconを閉じることはできませんサーバーへのnection、すでに行われているAJAX呼び出しのすべてsuccessコールバックはとにかく実行されます...

HTH

+0

マイコード: jQueryの(ドキュメント).ajaxComplete(関数(A、B、C){ \t \t \tにconsole.log(A、B、C); \t \t \t b.abort() ; \t \t \t return false; \t \t}); 開いている接続を閉じたり、アクティブなリクエストを取り消したりする必要はありません。成功コールバックの呼び出しを防ぐ必要があります。 –

+0

キャンセルするには、そのsuccessコールバックでajaxリクエストをキャンセルできません。それが開始される前にそれをしなさい – Rafay

+0

OK ..もう一度:)私は**コールバックの** ajax要求をキャンセルする必要はありません - 私はこれが不可能であることを理解します。 私の解決策は[http://pastebin.com/fDcTgqtd]ですが、私の評判のために答えとして掲示することはできません:) –

1

あなたがevent.stopImmediatePropagation()を使用してみましたか? 「他のイベントハンドラがと呼び出されないようにする」と表示されます。 jQueryのソースを見てから、我々はここで、この

if (fireGlobals) { 
    globalEventContext.trigger("ajaxComplete", [ jqXHR, s]); 
    // Handle the global AJAX counter 
    if (!(--jQuery.active)) { 
     jQuery.event.trigger("ajaxStop"); 
    } 
} 

が潜在的にあなたの問題を解決することの実施例である、http://jsfiddle.net/Akkuma/95zfj/

の注意点は、ajaxCompletesがすべてにバインドされていない場合は動作しないように見えるということです見ます同じ要素。

0

私が質問を正しく理解していれば、応答文字列に基づいてコールバックコールを防ぐことはできません。問題は、コールバックが実行された後にajaxSuccessやajaxCompleteのようなajaxグローバルイベントハンドラが呼び出されることです。

関連する問題