jQuery ajax的traditional參數的做用

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

$.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 
      }
}
相關文章
相關標籤/搜索