2017-08-09 103 views
2

我有一個瓦片標準的jsp,它包含在我的應用程序的所有頁面中。我試圖在應用程序的所有Ajax請求中注入一些安全令牌,爲此,我將下面的代碼片段寫入此JSP的頭部元素中。問題是,在大多數情況下,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); 
      } 
      }); 
相關問題