2012-01-25 7 views
3

私のWebページ(Djangoプラットフォーム上に構築されています)には、ajaxリクエストを介してサーバーデータをリクエストするjQueryがあります。 ajaxリクエストが応答する前に、ページから離れてクリックすると、エラー関数が実行されないようにするにはどうすればよいですか。ここで新しいページがリクエストされたときにDjangoでAjaxリクエストをキャンセルする方法

は私のjQueryの呼び出しです:私は(新しいページへ)ページからクリックすると

$(document).ready(function() { 
$.ajax({ 
    url:'/server/url/', 
    type: 'POST', 
    data: {some..data}, 
    success:function(response) { do stuff with response }, 
    error: function() {alert('error')} 
}); 

はどのようにして起こってからアラートを防ぐのですか?

+1

[this](http://stackoverflow.com/a/7748794/1114171) )いくつかのインスピレーションの答え –

答えて

1

グローバル変数を定義します。

var ajaxcancel = false; 

あなたは、ユーザーがウィンドウ閉じた場合trueことを確認する必要がありません:その変数の値をチェックするために

$(window).bind("beforeunload", function() { 
    ajaxcancel = true; 
}); 

をとAJAXエラー行を変更最初:

... 
error: function() {if (!ajaxcancel) alert('error'); } 
... 
+0

$(window).unload(function(){});でxhr.abort()を呼び出すことができますか? –

+0

まず、自分のコードを修正しましょう。ここでunloadイベント関数を使用しないほうがいいでしょう(ブラウザに依存しています)(http://api.jquery.com/unload/))。代わりに 'beforeunload'イベントをウィンドウにバインドすることができます(そして、その関数に何も返さない)。 jqXHRの中止時点で、私はFirefoxで試してみたが、それでもエラーは発生した。誰かが私をdownvoteして私の得点0を作ってください... – Hossein

+0

@ホセイン:あなたはちょうど答えを削除するか、それが正しいように編集することができます。 –

-1

送信されたAJAXリクエストをキャンセルすることはできませんが、あなたができることは(あなたの状況に当てはまるかもしれないと思うので)リクエストを出したページから離れるときに、最初のAJAXリクエストによってオフになります。これは、あなたが作成したAJAXリクエストがサーバー側で高価なレポートやデータベースやアルゴリズム操作を開始した場合に役立ちます。

少なくとも、ユーザーが移動して以来、リソースを無駄にしないようにサーバーに知らせることができます。