jqGrid处理http错误和服务器端错误

lxyd000 2011-10-26

我们知道,jqGrid从服务器端获取数据时,用的是ajax请求,如果请求过程中发生http错误(如后台服务器超时未响应、该url404)或者服务器端方法发生异常或错误,默认设置下的jqGrid是不会有任何提示信息的,并且也不会显示任何数据,连浏览器的javascript错都没有。

这对我们开发人员和用户都会造成疑惑,难以快速定位错误原因。

其实对jqGrid做一下设置即可让错误显示给前台。

1.HTTP错误

loadError事件就是专门处理这类错误的,我们可以这么写:

$("#list").jqGrid({
    url:'example.php',
    ...
    loadError: function(xhr,status,error){
       alert(status + " loading data of " + $(this).attr("id") + " : " + error );    },
    ...
});

 如果觉得每个grid都这么设置太麻烦,可以设置覆盖jqGrid的全局参数:

$.extend($.jgrid.defaults, {
    ...
    loadError: function(xhr,status,error){
       alert(status + " loading data of " + $(this).attr("id") + " : " + error );    },
    ...
});

我们还可以统一设置ajax请求失败时,报错误信息,这样就不用改动jqGrid的设置了:

$(document).ajaxError(function(e,xhr,opt){
	alert(xhr.statusText + " requesting " + opt.url);
});

2.服务器端错误

这种情况,需要在服务器端处理错误或异常信息,将其包装成json格式数据:

{
    "userdata":"查询时发生异常!"
}

 顺便贴一下正确时的数据:

{ 
  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz",
  "rows" : [
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
      ...
  ]
}

jqGrid需这样设置:

$("#list").jqGrid({
    url:'example.php',
    ...
    loadComplete: function(){
        alert($(this).getGridParam('userData'));
    },
    ...
});

以上各个示例显示信息都是用的alert()方法,如果觉得对用户不够友好,可考虑借助其他的方式,比如实现一个浮动消息提示框。

相关推荐

林大夏 / 0评论 2019-12-21
恋雨烟梦 / 0评论 2013-05-09