今天在寫一個提交到后台的時候 數據后台解析不了 出了點小小周折,看了下之前寫的代碼 發現是有個東西疏忽了,為了避免以后不再犯同樣的錯誤,特記錄如下:
{}和[]兩個看起了差不多 有時候傻傻分不清楚 其實兩者差異還是比較大的
{}在js中是一個對象 例如:
var object={}; //初始化操作 object={ 'id':1, 'name':'我是對象' } //賦值操作 object.id=1; object.name='我是對象'; //還可以給對象一個函數 object.add=function(){ alert('添加成功') }
而[]在js中是一個數組 例如
var array=[]; //賦值 array.id=1; array.name='我是數組';
這是定義上的區別,
在實際上會有什么影響呢?
這里僅介紹我這次出的問題
我頁面是這樣的 頁面有參數 a b c
如果是普通參數的話 用表單提交 或者普通post提交都可以
但是 b 是一個數組
c則是一個數組 c[0]又是一個數組
這樣我就打算構建一個對象 直接提交到后台 省得在后台在解析字符串 還原
於是我構建了這樣一個對象
var request=[]; request.a='標題'; var b=[]; b.push({'ele':'元素1'}); b.push({'ele':'元素2'}); request.b=b; var c=[]; var d=[]; d.push({'ele':'元素3'}); c.push({'array':d}); request.c=c;
然后用$.ajax 提交到后台
$.ajax({ type: "POST", url: "test", data: JSON.stringify(request), async: true, contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { //成功執行函數 console.log(result); }, error: function (result) { //錯誤時執行的函數 alert("網絡錯誤,請稍后再試"); } });
后台時間上只是把接收到的對象再返回來,這時候 返回來的參數都是空值
仔細看了一下 開始以為是ajax參數出問題了 后來回顧了一下以前寫的代碼 發現是{} []的問題
於是改為如下
var request={}; request.a='標題'; var b=[]; b.push({'ele':'元素1'}); b.push({'ele':'元素2'}); request.b=b; var c=[]; var d=[]; d.push({'ele':'元素3'});
c.push(d);
request.c=c;
再次提交 a b 取到值 但是c仍然是空
再次修改
var request={}; request.a='標題'; var b=[]; b.push({'ele':'元素1'}); b.push({'ele':'元素2'}); request.b=b; var c=[]; var d={}; d.ele=''元素3';
c.push(d);
request.c=c;
這時 a b c 都取到值
結論 用jquery post提交參數時 后台使用對象接受時 只能提交一個對象{} 對象里面的某個屬性可以是數組 但是數組必須是一個對象數組 不能是一個二維數組 即使實際上可以作為一個二維數組 也要把里面那個數組作為對象的屬性賦值;
另外JSON.stringify(data) 提交時 不可缺少 否則瀏覽器會自動以表單參數拼接方式提交 會丟失參數
提交時 檢查JSON.stringify(data)這個參數是否正確展示了數據