我在包含两个jqGrids的页面的前端工作。其中一个网格工作正常,双击行时启动编辑模式,按下Return
键后退出编辑模式提交更改。另一个(给我带来麻烦的那个)正在工作,并在按Return
时发出正确的POST请求,但它仍处于编辑模式。
奇怪的是,两个网格都使用相同的代码,只更改了POST
参数以及POST
,PUT
和DELETE
网址。我相信问题在我用来将POST
数据转换为JSON格式的函数中继续:如果不是设置了此函数中的所有必需参数,因此服务器在尝试保存时返回错误,网格退出编辑模式。但是,如果正确设置了所有参数并且POST
请求成功,则网格保持不变。工作正常的网格使用非常相似的函数将POST数据转换为JSON格式。
网格(相关)代码:
function loadCommissions(userid, accountid) {
$("#pager-commissions").empty();
$("#jqgrid-commissions").empty().jqGrid({
url : '/api/v1/commission/?account=' + accountid,
datatype : 'json',
ajaxGridOptions : {
contentType : "application/json"
},
jsonReader : {
repeatitems : false,
id : "id"
},
colNames : ["Commission", "Type", "Rate"],
colModel : [{
name : 'Commission',
width : 202
}, {
name : 'Type',
edittype : 'select',
formatter : 'select',
editoptions : {
value : 'F:Fixed Amount;P:Percentage'
},
stype : 'select'
}, {
name : 'Rate'
}],
cmTemplate : {
editable : true,
width : 100
},
ondblClickRow : function() {
var rowid = $("#jqgrid-commissions").getGridParam('selrow');
$('#jqgrid-commissions').jqGrid('editRow', rowid, {
keys : true,
dataType : 'json',
url : '/api/v1/commission/' + encodeURIComponent(rowid) + '/',
mtype : 'PUT'
});
},
serializeRowData : function(data) {
return serializeCommissionData(data, userid);
},
ajaxRowOptions : {
contentType : "application/json"
},
autowidth : true,
shrinkToFit : false,
gridview : true,
height : "auto",
autoencode : true,
loadonce : false,
rowNum : 10,
rowList : [10, 20, 30],
pager : "#pager-commissions",
viewrecords : true
});
}
将POST
数据转换为JSON格式(服务器期望)的函数:
function serializeCommissionData(data, userid) {
return JSON.stringify({
user : '/api/v1/user/' + userid + '/',
account : '/api/v1/account/' + $("a.jstree-clicked:first").parent().attr("id") + '/',
Type : data.Type,
Commission : data.Commission,
Rate : data.Rate
});
}
检索网格使用的JSON(/api/v1/commission/?account=1
):
{
"rows": [
{
"commission_currency": null,
"account": "/api/v1/account/1/",
"Commission": "Test",
"Rate": "0",
"user": "/api/v1/user/1/",
"Type": "F",
"id": 5,
"resource_uri": "/api/v1/commission/5/"
}
],
"meta": {
"total_count": 1,
"next": null,
"records": 20,
"limit": 20,
"offset": 0,
"total": 1,
"page": 1,
"previous": null
}
}
答案 0 :(得分:0)
我发现了问题。在网格的PUT
请求中,服务器返回HttpNoContent
(204),而不是HttpResponse
(200)。我改变了后端以返回200而不是204,这就是诀窍。