作為一名前端coder,用的最多的請(qǐng)求就是ajax請(qǐng)求了?;蛟S你用的其他框架,但是從原生js到j(luò)query,ajax你一定不陌生。當(dāng)初摸打滾爬的學(xué)習(xí)的時(shí)候就碰到關(guān)于ajax的一個(gè)問(wèn)題,那就是ajax數(shù)組傳參。
舉個(gè)實(shí)例如下代碼:
$.ajax({
url: 'http://localhost:8088/test.jsp',
type: 'GET',
dataType: 'json',
data:{
user:'username',
arr: ['talent','hirer','agent']
},
success: function(data){
},
error: function(){
}
})
當(dāng)請(qǐng)求的時(shí)候參數(shù)如下:

看到這你就明白問(wèn)題所在,arr數(shù)組不是你想要的,你想要的是這種:
user:username,
arr:'talent',
arr:'hirer',
arr:'agent'
項(xiàng)目催的很,情急之下你用這樣的方式解決
url: 'http://localhost:8088/test.jsp?user=username&arr=talent&arr=hirer&arr=agent'
運(yùn)行結(jié)果如下:

是的這樣的確解決,達(dá)到了你的目的。但是畢竟這是妥協(xié)的做法,那么你就想難道ajax就不能按照你想要的方式傳送嗎?答案當(dāng)然是有的,只怪當(dāng)初學(xué)習(xí)jquery不認(rèn)真了解不深入,先放解決辦法
代碼修改如下:
$.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(){
}
})
再看結(jié)果:

可以知道我們加了個(gè):traditional :true,那么這個(gè)traditional有何作用呢
打開(kāi)個(gè)jquery文檔如下解釋?zhuān)?/p>
traditional (Boolean)
如果你想要用傳統(tǒng)的方式來(lái)序列化數(shù)據(jù),那么就設(shè)置為true。請(qǐng)參考工具分類(lèi)下面的jQuery.param 方法。
在翻文檔查看jQuery.param 方法
將表單元素?cái)?shù)組或者對(duì)象序列化。是.serialize()的核心方法。
在jQuery 1.3中,如果傳遞的參數(shù)是一個(gè)函數(shù),那么用.param()會(huì)得到這個(gè)函數(shù)的返回值,而不是把這個(gè)函數(shù)作為一>個(gè)字符串來(lái)返回。
在jQuery 1.4中,.param()會(huì)深度遞歸一個(gè)對(duì)象來(lái)滿足現(xiàn)在腳本語(yǔ)言和框架,比如PHP, Ruby on Rails等。你可以
通過(guò)jQuery.ajaxSettings.traditional = true; 來(lái)全局得禁用這個(gè)功能。
注意:因?yàn)橛行┛蚣茉诮馕鲂蛄谢瘮?shù)字的時(shí)候能力有限,所以當(dāng)傳遞一些含有嵌套對(duì)象、數(shù)組的對(duì)象作為參數(shù)時(shí),
請(qǐng)務(wù)必小心!
在jQuery 1.4中,HTML5的input元素也會(huì)被序列化。
第一句已經(jīng)很明顯告知我們表單元素?cái)?shù)組或者對(duì)象序列化
所以只要將traditional設(shè)置為true就可以按照序列化方式傳參。問(wèn)題也就解決了,所以說(shuō)看書(shū)還是要仔細(xì)