jquery框架的ajax參數(shù)除了常用的
{
url: 'xxx',
type: 'xxx',
data: 'xxx',
success: 'xxx'
...
}
外還有有一個(gè)參數(shù)需要特別注意下traditional默認(rèn)值是false蘸际。ajax做數(shù)據(jù)處理時(shí)绳匀,是通過(guò)jQuery.param( obj, traditional )該方法進(jìn)行處理询枚。
jquery1.4版本以后
traditional參數(shù)台舱,默認(rèn)false的時(shí)候如果是{a:{b:'value'}}是處理成a[b],這樣形式涧偷,如果是數(shù)組:data:{a:[1,2]},是解析成a[]=1&a[]=2块差,這種方式后臺(tái)確實(shí)要做兼容(取a[b]或a[])來(lái)取值侵续。
在數(shù)組情況下把traditional參數(shù)設(shè)置成true倔丈,是解析成a=1&a=2,對(duì)后臺(tái)直接通過(guò)a拿數(shù)據(jù)。但是實(shí)驗(yàn)了下object情況状蜗,把traditional設(shè)置成true需五,轉(zhuǎn)成了a=[object+Object],這樣就是費(fèi)的了轧坎。false時(shí)解析成上面的形式應(yīng)該就是類(lèi)型指示作用宏邮,我看到這種格式就知道請(qǐng)求數(shù)據(jù)是Array還是object了,true就是按照f(shuō)orm提交的方式傳值眶根。
- 針對(duì)object請(qǐng)求傳值蜀铲,如何和服務(wù)器端配合:
如果是get請(qǐng)求边琉,可以按照
{data: {a:encodeURIComponent(JSON.stringify(xxx))}
這樣后端需要拿到a然后再進(jìn)行parse属百。
比較建議采用POST傳值,代碼:
$.ajax({
url:'xxx',
type:'post',
contentType: "application/json;",
data:JSON.stringify({a:{b:1}})
})
這樣后端只需要通過(guò)加個(gè)注解@RequestBody变姨,就會(huì)解析成一個(gè)java bean對(duì)象(注:這個(gè)java bean必須包含所有的json結(jié)構(gòu)族扰,如果不包含會(huì)報(bào)錯(cuò)),這樣在devTool中可以看到很清晰的請(qǐng)求參數(shù)結(jié)構(gòu)的定欧。
附官網(wǎng)幾個(gè)例子:
// <=1.3.2:版本號(hào)渔呵,traditional為true的情況
$.param({ a: [ 2, 3, 4 ] }); // "a=2&a=3&a=4"
// >=1.4:版本號(hào)
$.param({ a: [ 2, 3, 4 ] }); // "a[]=2&a[]=3&a[]=4"
// <=1.3.2:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a=[object+Object]&d=3&d=4&d=[object+Object]"
// >=1.4:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"