2017-08-09 1 views
2

私のアプリケーションのすべてのページに含まれるタイル規格のjspがあります。私は、アプリケーションのすべてのAjaxリクエストにセキュリティトークンを注入しようとしています。そのために、以下のスニペットをこのJSPのhead要素に書きました。問題は、ほとんどの場合、ajax呼び出しが予想通りにインターセプトされ、トークンがデータに挿入されることです。しかし、場合によってはbeforesendメソッドが呼び出されないため、トークンが要求に存在しません。他の人がいる間にAjaxコールが傍受されない理由はわかりません。Ajax beforesendメソッドが動作しない場合があります

$(document).ready(function() { 
      $.ajaxSetup({ 
       beforeSend: function(xhr, settings) { 
         var controlId = "<c:out value='${XXXControlIDXXX}' />"; 

        // Injecting CSRF token id into data 
         if(controlId!=null) { 
         var csrfData = { 
          XXXControlIDXXX : controlId          
         } 
         settings.data += "&" + $.param(csrfData); 
         } 
       } 
      });    
     }); 
+2

それは 'beforeSend'が断続的に失敗している可能性は非常に低いです。要求にデータがないか、 '$ .ajaxSetup'が実行される前にAJAX呼び出しを行っている可能性が高くなります。 –

+3

@RaviRanjanタイトルは同じですが、質問と解決策はこの状況に関連して表示されません。 –

+0

@RoryMcCrossan - $ .ajaxsetupの前にajaxコールを作成するにはどうすればいいですか? – rj4u

答えて

0

が、私は問題を発見した: は、以下のコードです。 Rory McCrossanに感謝します。彼のインプットは正しい方向へ私を導きます。だから、ajax呼び出しはajaxsetupの前に起こっていたので、私はトークンを設定できませんでした。私は以下のスニペットを使用しました。スニペットはドキュメントイベントに依存せず、ページ上に座って、すべてのajax呼び出しでトリガーされます。

  $.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
      var controlId = "<c:out value='${ControlID}' />"; 
      if(controlId) { 
      var csrfData = { 
         ControlID : controlId          
        } 
      options.data + = "&" + $.param(csrfData); 
      } 
      }); 
関連する問題