jquery框架的ajax參數除了常用的
{
url: 'xxx',
type: 'xxx',
data: 'xxx',
success: 'xxx'
...
}
外還有有一個參數需要特別注意下traditional默認值是false。ajax做數據處理時,是通過jQuery.param( obj, traditional )該方法進行處理。
jquery1.4版本以后
traditional參數,默認false的時候如果是{a:{b:'value'}}是處理成a[b],這樣形式,如果是數組:data:{a:[1,2]},是解析成a[]=1&a[]=2,這種方式后臺確實要做兼容(取a[b]或a[])來取值。
在數組情況下把traditional參數設置成true,是解析成a=1&a=2,對后臺直接通過a拿數據。但是實驗了下object情況,把traditional設置成true,轉成了a=[object+Object],這樣就是費的了。false時解析成上面的形式應該就是類型指示作用,我看到這種格式就知道請求數據是Array還是object了,true就是按照form提交的方式傳值。
- 針對object請求傳值,如何和服務器端配合:
如果是get請求,可以按照
{data: {a:encodeURIComponent(JSON.stringify(xxx))}
這樣后端需要拿到a然后再進行parse。
比較建議采用POST傳值,代碼:
$.ajax({
url:'xxx',
type:'post',
contentType: "application/json;",
data:JSON.stringify({a:{b:1}})
})
這樣后端只需要通過加個注解@RequestBody,就會解析成一個java bean對象(注:這個java bean必須包含所有的json結構,如果不包含會報錯),這樣在devTool中可以看到很清晰的請求參數結構的。
附官網幾個例子:
// <=1.3.2:版本號,traditional為true的情況
$.param({ a: [ 2, 3, 4 ] }); // "a=2&a=3&a=4"
// >=1.4:版本號
$.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"