作為一名前端coder,用的最多的請求就是ajax請求了。或許你用的其他框架,但是從原生js到jquery,ajax你一定不陌生。當初摸打滾爬的學習的時候就碰到關于ajax的一個問題,那就是ajax數組傳參。
舉個實例如下代碼:
$.ajax({
url: 'http://localhost:8088/test.jsp',
type: 'GET',
dataType: 'json',
data:{
user:'username',
arr: ['talent','hirer','agent']
},
success: function(data){
},
error: function(){
}
})
當請求的時候參數如下:
看到這你就明白問題所在,arr數組不是你想要的,你想要的是這種:
user:username,
arr:'talent',
arr:'hirer',
arr:'agent'
項目催的很,情急之下你用這樣的方式解決
url: 'http://localhost:8088/test.jsp?user=username&arr=talent&arr=hirer&arr=agent'
運行結果如下:
是的這樣的確解決,達到了你的目的。但是畢竟這是妥協的做法,那么你就想難道ajax就不能按照你想要的方式傳送嗎?答案當然是有的,只怪當初學習jquery不認真了解不深入,先放解決辦法
代碼修改如下:
$.ajax({
url: 'http://localhost:8088/test.jsp',
type: 'GET',
dataType: 'json',
traditional :true
data:{
user:'username',
arr: ['talent','hirer','agent']
},
success: function(data){
},
error: function(){
}
})
再看結果:
可以知道我們加了個:traditional :true,那么這個traditional有何作用呢
打開個jquery文檔如下解釋:
traditional (Boolean)
如果你想要用傳統的方式來序列化數據,那么就設置為true。請參考工具分類下面的jQuery.param 方法。
在翻文檔查看jQuery.param 方法
將表單元素數組或者對象序列化。是.serialize()的核心方法。
在jQuery 1.3中,如果傳遞的參數是一個函數,那么用.param()會得到這個函數的返回值,而不是把這個函數作為一>個字符串來返回。
在jQuery 1.4中,.param()會深度遞歸一個對象來滿足現在腳本語言和框架,比如PHP, Ruby on Rails等。你可以
通過jQuery.ajaxSettings.traditional = true; 來全局得禁用這個功能。
注意:因為有些框架在解析序列化數字的時候能力有限,所以當傳遞一些含有嵌套對象、數組的對象作為參數時,
請務必小心!
在jQuery 1.4中,HTML5的input元素也會被序列化。
第一句已經很明顯告知我們表單元素數組或者對象序列化
所以只要將traditional設置為true就可以按照序列化方式傳參。問題也就解決了,所以說看書還是要仔細