2012-04-26 24 views
1

私はasp.net mvc3アプリケーションで作業しています。私はこのjQueryの関数に値がfalseの場合(ajax呼び出しの前に)ajax呼び出しを停止します。

function CheckSession() { 
     $.ajax({ 
      type: 'POST', 
      url: '@Url.Action("CheckSession", "Home")', 
      success: function (isAvailable) { 
       return isAvailable; 
      }, 
      complete: function (owner) { 

      }, 
      error: function (owner) { 
       alert('Error Getting session'); 
       return false; 
      } 

     }); 
    } 

を持って

は、基本的にこのセッションが何をするか、アクションがtrueまたはfalseを返しますことをHomeControllerからアクションを呼び出すことです。

私がしたいことはこれです アプリケーションですべてのajaxコールを呼び出す前に、まずこの関数を使用します。それがtrueを返すならば、私たちはその呼び出しと一緒に手続きします。さもなければ、何もしません。

すべてのコードを通過し、

は、私は、これはすべてのAJAXの前にそれを呼び出し、戻り値をテストすることによって行うことができます知っているすべてのAJAX呼び出しの前にそれを呼び出すことがなく、このを行う方法がありますが、私にはたくさんのajaxコールがあります。

$(ajax).beforeCall(function (event) { 
    if (CheckSession()){ 
     event.ProceedWithCall; 
    } 
    else { 
     //Stop the call; 
     return false; 
    } 
}); 
+0

素敵なプレゼンテーションのためのセキュリティの二層以外の何のためにJavaScriptを使用してセッションをチェックしないでください。 –

+0

@infensusどういう意味ですか?それはjavascriptからセッションをチェックする関数を呼び出すことは危険ですか? – Youssef

+0

^彼はたぶん私が私の答えを得ようとしていた点を意味します。 –

答えて

3

あなたはajaxSetupを使用して、このようbeforeSend機能を設定することができます。

$.ajaxSetup({ 
    beforeSend: function(){ 
      return !CheckSession(); 
     } 
}); 

beforeSenddocs

jQueryの1.4で(jqXHRを変更するために使用することができ、プリ要求コールバック関数.x、XMLHTTPRequest)オブジェクトを送信します。これを使用してカスタムヘッダーなどを設定します。jqXHRおよび設定マップは引数として渡されます。これはAjaxイベントです。 * beforeSend関数でfalseを返すと、リクエストがキャンセルされます。

ajaxSetupdocs

説明:将来のAjaxリクエストのためのデフォルト値を設定します。

+0

おかげでたくさんexacltly私はヒントについて – Youssef

1

beforeSend(jqXHR、設定)を使用し、コールバック:

私が探している任意のAJAX呼び出しは、このような

何かをされる前に起動するイベントハンドラです

jqXHR (jQuery 1.4.x、XMLHTTPRequest内)オブジェクトを送信する前に変更するために使用できる事前要求コールバック関数。この を使用してカスタムヘッダーなどを設定します.jqXHRおよび設定マップは、 引数として渡されます。これはAjaxイベントです。 beforeSend 関数でfalseを返すと、リクエストがキャンセルされます。

http://api.jquery.com/jQuery.ajax/を参照してください。

+0

ありがとうございますが、これで私はすべてのAjax呼び出しを1つずつ実行する必要があります。私が避けようとしているもの。 – Youssef

+0

本当に。あなたが見る)$ .ajaxSetupを(使用してbeforeSendを設定することができます。http://api.jquery.com/jQuery.ajaxSetup/ – amaters

0

個人的には、おそらくクライアント側のJavascriptではなく、セッションチェックロジックを呼び出すのがASP.NETエンドポイントだからです。

考えてみましょう:セッションをチェックするために.NETコードをキックするAJAX呼び出しを起動し、ブール値を返し、trueの場合は別のAJAX呼び出しを起動します。 実質 AJAX呼び出し(つまりAJAX呼び出し2)を起動し、ASP.NETエンドポイントにAJAX呼び出し1で呼び出しているものを使用してもらうのはなぜですか?

あなたがtons of AJAX callsを持って考えると大幅な利得を有することができ、HTTPリクエストのラウンドトリップをこのように保存することになるだろう。

ちょうど私の2セントです。それを除いて、私は上記の@ gdoronの答えに行きます。

+0

感謝を望ん。しかし、私の問題はこれです: 'CheckSession()'がfalseを返す場合、私は別のページにユーザーをリダイレクトしたいと思います。これは、AJAX呼び出しているので、私はC#のコードからリダイレクトする場合は、ページが自分のページ上のdivの内側にロードされ、完全にリダイレクトされませんれます。ブラウザを別のページに完全にリダイレクトする唯一の方法は、JavaScriptからリダイレクトすることです。それが私がjavascriptでチェックする必要がある理由です – Youssef