onSelectRow: function(id){
if(id && id!==lastSel){
jQuery(this).restoreRow(lastSel);
lastSel=id;
}
jQuery(this).editRow(id,true,null,
function(response, postdata){
var data = eval('(' + response.responseText + ')');
data.result.success ? alert('success') : alert('error')
});
}
在这种情况下,我可以处理错误,但在此行数据恢复之后。
问题是如果data.result.success == false
?
如果我通过模态框进行编辑,那么一切正常。但是在内联模式下没有。
答案 0 :(得分:1)
editRow函数具有以下参数:
jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url,
extraparam, aftersavefunc,errorfunc, afterrestorefunc);
您当前的代码仅使用succesfunc
。重要的是,服务器返回一些更大或等于400的HTTP status code。然后服务器响应将被jQuery.ajax和jqGrid解释为错误。要显示任何错误消息或出现错误时的任何其他操作,您应使用editRow函数的 errorfunc 参数。
还有一个小小的评论。您应该使用jQuery.parseJSON或JSON.parse
,而不是使用eval
。
更新:我在此回答您的评论问题。为什么使用errorfunc
而不是succesfunc
这一点很重要?有不同的原因。如果你把标有糖的盒子装满了盐,它可能会给你的厨房带来痛苦的后果。在使用错误的情况下,editRow
的回调函数完全相同。我只举几个例子:
我写的关于处理错误的内容是一般规则。 jqGrid在发生错误时定义了许多事件。例如,loadError用于网格填充,errorTextFormat用于所有类型的表单编辑,errorCell用于单元格编辑,errorfunc用于内联编辑。所有方法都基于以下事实:如果出现错误,服务器响应具有与错误相对应的HTTP状态代码(更大或等于400)。
答案 1 :(得分:1)
我想修复相同的场景,我可以这样做:
$.extend($.jgrid.inlineEdit, { restoreAfterError: false });
在网格模型中:
ajaxRowOptions: {
complete: function(res, stat) {
if (res.statusText=='OK') {
return [true, res.responseText ];
} else {
return [false, res.responseText ];
}
}
}