我有一个运行得很好的jqgrid。
我想知道是否有可能捕获服务器发送的错误?它是如何做到的?
发布于 2009-11-11 03:34:49
我最近在为CB Richard Ellis (我的雇主)工作的一个原型项目中广泛使用了jqgrid。有许多方法可以填充jqgrid,如documentation中所述:(请参阅“检索数据”节点)。
目前,我进行了一个服务调用,它返回一个json字符串,当计算该字符串时,会给出一个包含以下内容的对象:
string[]
在我的成功回调中,我像这样手动创建了jqgrid:("data“是我在计算返回的json字符串时得到的对象)。
var colNames = data.ColumnNames;
var colModel = data.ColumnModels;
var previewData = data.PreviewData;
var totalRows = data.TotalRows;
var sTargetDiv = userContext[0]; // the target div where I'll create my jqgrid
$("#" + sTargetDiv).html("<table cellpadding='0' cellspacing='0'></table>");
var table = $("#" + sTargetDiv + " > table");
table.jqGrid({
datatype: 'local',
colNames: colNames,
colModel: colModel,
caption: 'Data Preview',
height: '100%',
width: 850,
shrinkToFit: false
});
for (var row = 0; row < previewData.length; ++row)
table.addRowData(row, previewData[row]);所以你可以看到我手动填充了数据。有一种以上的服务器错误。存在逻辑错误,您可以将其作为json字符串中的属性返回,并在尝试创建jqgrid之前进行检查(或以行为单位)。
if (data.HasError) ...或以每行为单位
for (var row = 0; row < previewData.length; ++row)
{
if (previewData[row].HasError)
// Handle error, display error in row, etc
...
else
table.addRowData(row, previewData[row]);
}如果您的错误是服务器上未处理的异常,那么您可能需要在异步调用中进行错误回调。在这种情况下,创建jqgrid的成功回调(可能)根本不会被调用。
当然,这适用于手动填充jqgrid,这只是众多可用选项之一。如果您将jqgrid直接连接到服务调用或函数以检索数据,则完全是另一回事。
在文档页面上,查看Basic Grids > Events。在那里,您将看到可能会派上用场的"loadError“事件。
发布于 2009-12-05 08:17:03
如果您查看jqgrid demo site并查看“3.2版中的新特性”,应该会有一个关于控制服务器错误的部分。
具体来说,它使用了一个回调参数loadError:
loadError : function(xhr,st,err) {
jQuery("#rsperror").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
}正如mcv上面所说的,有些错误是数据错误,因此您需要专门处理这些错误。
发布于 2009-12-02 22:05:34
使用回调。如果您得到一个实际的http错误(例如,400或500 ),就会触发loadError(xhr,status,error)。
但是有些错误(比如验证)不应该抛出400或500错误。但您仍然可以在loadComplete(xhr)中捕获它们。解析您的json,并检查您所使用的识别错误的方式。例如,我在我的loadComplete()中这样做:
if (jsonResponse.errors) { $.each(jsonResponse.errors, function(i, val){ addErrorMessage($("#"+val.field), val.message); }); }
https://stackoverflow.com/questions/1636580
复制相似问题