首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让JQGrid识别服务器发送的错误?

如何让JQGrid识别服务器发送的错误?
EN

Stack Overflow用户
提问于 2009-10-28 19:07:46
回答 8查看 27.5K关注 0票数 22

我有一个运行得很好的jqgrid。

我想知道是否有可能捕获服务器发送的错误?它是如何做到的?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-11-11 03:34:49

我最近在为CB Richard Ellis (我的雇主)工作的一个原型项目中广泛使用了jqgrid。有许多方法可以填充jqgrid,如documentation中所述:(请参阅“检索数据”节点)。

目前,我进行了一个服务调用,它返回一个json字符串,当计算该字符串时,会给出一个包含以下内容的对象:

string[]

  • ColumnModels:对象数据: objecteach object has properties that match the names in the column model

  • TotalRows:
  • ColumnNames:
    • name", "index" and "sortable

在我的成功回调中,我像这样手动创建了jqgrid:("data“是我在计算返回的json字符串时得到的对象)。

代码语言:javascript
复制
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之前进行检查(或以行为单位)。

代码语言:javascript
复制
if (data.HasError) ...

或以每行为单位

代码语言:javascript
复制
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“事件。

票数 7
EN

Stack Overflow用户

发布于 2009-12-05 08:17:03

如果您查看jqgrid demo site并查看“3.2版中的新特性”,应该会有一个关于控制服务器错误的部分。

具体来说,它使用了一个回调参数loadError:

代码语言:javascript
复制
loadError : function(xhr,st,err) { 
    jQuery("#rsperror").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
}

正如mcv上面所说的,有些错误是数据错误,因此您需要专门处理这些错误。

票数 20
EN

Stack Overflow用户

发布于 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); }); }

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1636580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档