0
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

如果我通过模态框进行编辑,那么一切正常。但在内联模式下不会。

4

2 回答 2

1

我想解决同样的情况,我可以这样做:

$.extend($.jgrid.inlineEdit, { restoreAfterError: false });

在网格模型中:

ajaxRowOptions: {
    complete: function(res, stat) {
        if (res.statusText=='OK') {
            return [true, res.responseText ];
        } else {
            return [false, res.responseText ];
        }
    }
}
于 2013-09-06T08:05:59.930 回答
1

editRow函数有以下参数:

jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url,
                          extraparam, aftersavefunc,errorfunc, afterrestorefunc);

您当前的代码succesfunc仅使用。重要的是,服务器返回一些大于或等于 400 的HTTP 状态代码。然后服务器响应将被jQuery.ajax和 jqGrid 解释为错误。要在出现错误时显示任何错误消息或任何其他操作,您应该使用editRow函数的errorfunc参数。

再说一句小话。您应该使用jQuery.parseJSONJSON.parse代替使用eval.

更新:我在这里回答评论中的问题。为什么重要的是使用errorfunc而不是总是succesfunc?有不同的原因。如果你在标有糖标签的盒子里装满盐,它可能会在你的厨房里产生苦涩的后果。完全一样的是在错误使用的情况下不同的回调函数editRow。我只能举几个例子:

  • 您的服务器部分不仅可以显式地产生错误。您的 Web 服务器可以从您的任何其他代码(如 SQL 查询)中引发异常。即使您捕获了所有此类错误,发送到服务器的格式错误或其他错误的输入数据也会产生带有失败 HTTP 状态和错误描述的响应。此类错误响应将生成您使用的框架(ASP.NET、PHP 等)的 Web 服务器。
  • jqGrid使用的jQuery应该知道哪个服务器响应成功,哪个是错误响应。经常错误响应有另一种格式,所以不会被jQuery.ajax 解析(jQuery 不会将它从 JSON 字符串转换为对象)。
  • jqGrid 知道响应是否成功是很重要的。如果 jqGrid 在响应后发生错误,则做一件事,如果响应成功,则做另一件事。将调用不同的事件,将显示不同的消息等等。

我写的关于处理错误的内容是一般规则。jqGrid 定义了许多事件以防出错。例如用于网格填充的loadError,用于所有类型的表单编辑的errorTextFormat,用于单元格编辑的errorCell和用于内联编辑的errorfunc。所有方法都基于这样一个事实,即如果发生错误,服务器响应具有与错误相对应的 HTTP 状态代码(大于或等于 400)。

于 2011-01-12T11:46:36.040 回答