2012-09-06 32 views
1

我正在建立一個系統,顯示用戶的列表,並在選擇一個用戶請求某種形式的密碼。這些值保存在頁面的隱藏字段中,並且需要與每個請求一起作爲認證的一種形式發送。 (我知道這裏存在的MITM漏洞,但它是一個非常低調的系統,所以安全性並不是一個大問題)。始終發送某些值與ajax請求/職位

現在我需要發送這些值與每個請求,以授權當前'登錄'用戶。我想通過ajaxSetup自動執行此操作,但是我遇到了一些問題。

我的第一個嘗試是:

init_user_auth: function(){ 
    $.ajaxSetup({ 
     data: { 
      'user' : site_user.selected_user_id(), 
      'passcode': site_user.selected_user_pc(), 
      'barcode' : site_user.selected_user_bc() 
     } 
    }); 
}, 

不過,我應該知道,這一次讀取值,在呼叫到ajaxSetup的時間,從來沒有重讀他們。我需要的是每次進行ajax調用時實際調用函數的方法。

我目前正試圖瞭解這裏發生了什麼:https://groups.google.com/forum/?fromgroups=#!topic/jquery-dev/OBcEfgvTJ9I,但是通過flamewar和非常低級的東西在那裏,我不確定我會發生什麼事情。

這是繼續下去的方法,還是我應該面對事實並手動向每個ajax調用添加登錄信息?

回答

5

如果我得到你的權利,再看看此示例代碼,它增加了一定的值,每個ajax請求,

(function ($) { 
    var _ajax = $.ajax, 
    A = $.ajax = function(options) {      
     if (typeof options.data == 'object') {      
      $.extend(options.data, A.data); 
     } else if (typeof options.data == 'string' && options.data.length > 0) { 
      for (var key in A.data) { 
       options.data += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(A.data[key]); 
      } 
     } else { 
      options.data = A.data; 
     } 
     return _ajax(options); 
    }; 
})(jQuery); 

而你把它想:

$.ajax.data = { "user": 10, "pass" : 20 }; //params that always need to be passed 

然後Ajax調用,

$.ajax({ 
    type: "POST", 
    url: "http://localhost/blg/crl_chk.php", 
    data : { "first" : 1}, //now those params will be added wit this 
    success: function(resp) { 
    console.log(resp); 
    } 
}); 

如果你調用$.ajax沒有數據,這些PARAMS會獲得通過。

您的意思是這樣的

+0

這看起來像我無法從我提到的谷歌討論中推論出來,我會盡快嘗試,謝謝! – DZittersteyn

+0

工作過,謝謝! – DZittersteyn

2

似乎只有當Ajax設置對象與您的存根合併時纔會調用您希望調用的函數。 (大概在第一個Ajax請求期間)

你可以做的是讓數據對象引用全局變量而不是函數。

「但是,這不會調用函數在每次調用$.ajax()你說什麼?

只需撥打電話給你的函數在.ajaxSend().ajaxStart()並讓他們更新全局變量!

http://api.jquery.com/ajaxSend/

http://api.jquery.com/ajaxStart/

+0

嗯,有趣的想法,但@蘇希爾的方法似乎更清潔。如果我崩潰並燒燬,我會試試這個!謝謝! – DZittersteyn

+0

我想我會更喜歡這個解決方案,但是它沒有通過10秒的複製粘貼測試。另一個答案開箱即用。 – ThorSummoner