【轉】jQuery ajax的traditional參數的作用

一般的,可能有些人在一個參數有多個值的情況下,可能以某個字符分隔的形式傳遞,比如頁面上有多個checkbox:

$.ajax{
      url:"xxxx",
      data:{
            p: "123,456,789"
      }
}

然後後臺獲取參數後再分隔,這種做法有很大弊端,試問如果某一個參數值中出現了分隔符所使用的字符,會出現什麼情況呢?當然後臺獲取的參數將與實際情況不符.
這時我想到了將上述代碼寫成這樣:


$.ajax{
      url:"xxxx",
      data:{
            p: ["123", "456", "789"]
      }
}

如果單純寫成這樣,在java後臺是無法取到參數的,因爲jQuery需要調用jQuery.param序列化參數, jQuery.param( obj, traditional )默認的話,traditional爲false,即jquery會深度序列化參數對象,以適應如PHP和Ruby on Rails框架, 但servelt api無法處理,我們可以通過設置traditional 爲true阻止深度序列化,然後序列化結果如下:
p: [“123”, “456”, “789”] => p=123&p=456&p=456
隨即,我們就可以在後臺通過request.getParameterValues()來獲取參數的值數組了,
所以,比如我們前臺有多個checkbox,前臺的代碼可以寫成:

var values = $("input[type=checkbox]").map(function(){
      return $(this).val();
}).get();
$.ajax{
      url:"xxxx",
      traditional: true,
      data:{
            p: values 
      }
}

原文地址:http://folyred.iteye.com/blog/1554825

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章