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

Zer*_*ool 22 xml jquery jqgrid

我有一个功能非常好的jqgrid.

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

r00*_*fus 19

如果您查看jqgrid演示站点并查看"3.2版中的新功能",应该有一个关于控制服务器错误的部分.

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

loadError : function(xhr,st,err) { 
    jQuery("#rsperror").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
}
Run Code Online (Sandbox Code Playgroud)

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

  • +1这是我在Google搜索后发现此问题时所寻找的内容.我想捕获用于获取数据的URL中发生的内部500错误. (3认同)

Sam*_*ham 7

我最近广泛使用jqgrid作为我正在为CB Richard Ellis(我的雇主)工作的原型项目.有很多方法可以填充jqgrid,如文档中所述:(请参阅"检索数据"节点).

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

  • ColumnNames:string []
  • ColumnModels:object [](每个对象都有"name","index"和"sortable"属性)
  • 数据:object [](每个对象都具有与列模型中的名称匹配的属性)
  • TotalRows:int

在我成功的回调中,我手动创建了这样的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]);
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我手动填充数据.有超过1种服务器错误.存在逻辑错误,您可以将其作为json字符串中的属性返回,并在尝试创建jqgrid(或基于每行)之前进行检查.

if (data.HasError) ...
Run Code Online (Sandbox Code Playgroud)

或者以每行为基础

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]);
}
Run Code Online (Sandbox Code Playgroud)

如果您的错误是服务器上的未处理异常,那么您可能希望异步调用上出现错误回调.在这种情况下,你的成功回调(可能)是创建你的jqgrid根本不会被调用.

当然,这适用于手动填充jqgrid,这只是众多可用选项中的一种.如果你有jqgrid直接连接到服务调用或函数来检索数据,那么这完全是另一回事.

在文档页面上,查看Basic Grids> Events下的.在那里你会看到可能派上用场的"loadError"事件.