2011-12-21 43 views
1

用戶在jqGrid中編輯數據後,我想將格式化的JSON字符串返回給服務器以供使用。 下面是一個什麼樣的服務器預計將收到的樣本:將jqGrid的編輯數據序列化爲JSON

{ 
    "aptitudeArrayList":[ 
    { 
     "skill":"VITS", 
     "value":2, 
     "id":2, 
     "color":"RED" 
    }, 
    { 
     "skill":"GBFM", 
     "value":6, 
     "id":1, 
     "color":"GREEN" 
    }, 
    { 
     "skill":"JSON", 
     "value":4, 
     "id":3, 
     "color":"RED" 
    }, 
    { 
     "skill":"CASTLEROCK", 
     "value":7, 
     "id":4, 
     "color":"RED" 
    } 
    ], 
    "cell":12412, 
    "line":"FIRST_LINE", 
    "name":"Barop", 
    "id":1, 
    "region":"The end", 
    "available":true 
} 

這裏是我的ColModel的一個片段:

... 
{ 
    name:'cell', 
    label:'Cell #', 
    width:80, 
    align:'center', 
    editable:true, 
    editrules:{required:true, integer:true}, 
    editoptions:{size:10, maxlength:10} 
}, 
{ 
    name:'available', 
    label:'Available', 
    formatter:'checkbox', 
    width:46, 
    align:'center', 
    editable:true, 
    edittype:'checkbox', 
    editoptions:{value:"true:false"} 
}, 
{ 
    name:"vits.value", 
    label:'VITS', 
    width:300, 
    align:'center', 
    editable:true, 
    jsonmap:"aptitudeArrayList.0.value" 
}, 
{ 
    name:"vits.color", 
    editable:true, 
    jsonmap:"aptitudeArrayList.0.color" 
} 
... 

以下是編輯選項:(我註釋掉POSTDATA其不需要截至目前)

var editOptions = { 
    onclickSubmit:function (params, postdata) { 
     params.url = URL + '/'; //+ postdata.id; 
    } 
}; 

編輯被調用後,將數據發送給這個函數:

$.extend($.jgrid.edit, { 
    closeAfterEdit:true, 
    closeAfterAdd:true, 
    ajaxEditOptions:{ contentType:"application/json" }, 
    mtype:'PUT', 
    serializeEditData:function (data) { 
     delete data.oper; 
     return JSON.stringify(data); 
    } 
}); 

的不足以上代碼返回該JSON:

{ 
    "id":"1", 
    "name":"Barop", 
    "region":"The end", 
    "line":"FIRST_LINE", 
    "cell":"12412", 
    "available":"true", 
    "vits.value":"2", 
    "vits.color":"RED" 
    ... 
} 

當我調試器附加我發現data包含:dataObject { id="1", name="Barop", region="The end", ... vits.value="2", vits.color="RED"}現在看來,這是越來越從jqGrid的的name屬性的鑰匙。

我該如何將我的數據序列化爲服務器需要的格式?

回答

2

解決您的問題的最簡單方法似乎是您使用的serializeEditData的修改。它可以是有關下列

serializeEditData: function (data) { 
    return JSON.stringify({ 
     id: parseInt(data.id, 10), 
     name: data.name, 
     line: data.line, 
     cell: parseInt(data.cell, 10), 
     available: data.available === 'true', 
     aptitudeArrayList: [ 
      value: data.value, 
      color: data.color 
     ] 
    }); 
} 

而且我建議你最好不要用點或name財產的任何其他meta-characters。要麼你可以重命名name: "vits.value"name: "value"或使用其他index財產

name: "value", 
index: "vits.value", 
jsonmap: "aptitudeArrayList.0.value" 
+0

這正是我需要的,謝謝!閱讀其他問題的答案對我也有很大的幫助。 – Jaym 2011-12-22 15:21:26

+0

@Jaym:不客氣!我很高興地看到,我的其他答案也可以幫助你。 – Oleg 2011-12-22 15:23:28