2011-12-21 21 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:dataObject { id="1", name="Barop", region="The end", ... vits.value="2", vits.color="RED"}それはjqGridでname属性からキーを取得しているようだ:

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

私はdataが含まれていることを見つけるデバッガをアタッチ。

サーバーで必要な形式にデータをシリアル化するにはどうすればよいですか。

答えて

2

あなたの問題を解決する最も簡単な方法は私があなたが使用するserializeEditDataの変更のようです。それはまた、私はあなたがより良い点やnameプロパティ内の他のmeta-charactersを使用しないことをお勧めします次

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: "value", 
index: "vits.value", 
jsonmap: "aptitudeArrayList.0.value" 
+0

name: "value"name: "vits.value"の名前を変更または追加indexプロパティを使用するか、これは、私はあなたに感謝し、必要な正確に何であります!あなたの答えを他の質問で読むことは、私にも大きな助けとなりました。 – Jaym

+0

@Jaym:ようこそ!私の他の答えもあなたを助けることができることを読んでうれしく思います。 – Oleg

関連する問題