如何在jqGrid中显示之前“预处理”ajax响应

我正在使用jqGrid来显示数据库查询的结果。 执行查询然后将结果格式化为XML以供jqGrid使用的php脚本也会进行一些错误检查。 (例如,它可能会validation日期以确保它们的格式正确,并且开始日期于结束日期。)这些类型的错误被格式化为XML,但格式与成功查询不同。

我想要做的是截取ajax调用的结果并根据结果是否包含这些自定义错误之一来处理它。 如果没有错误,那么我想在jqGrid中加载结果。 如果出现错误,我只会在没有网格的页面上显示(因为网格设置为不同数量的列)。

我正在寻找的是如何进行的正确方法(不一定是实际的代码)。 (我的问题不是如何解析XML响应,而是如何拦截它以便我能够解析它。)我曾希望使用像gridComplete或loadComplete这样的jqGrid事件,但这些似乎在网格已经加载触发。

这是我的最终解决方案。

我的服务器脚本以xml格式返回自定义错误:

 problem End date is before start date.  

所以我使用ajaxGridOptions建议的ajaxGridOptions技术来检查错误标记,如果找到,则显示错误消息:

  ajaxGridOptions: {dataFilter: function(data,dataType){ // preprocess the data if ( $(data).find("code").text() == 'problem' ) { // check for an error in the result $("#list").jqGrid('GridUnload'); $("#errormsg").text( $(data).find("description").text() ); }else{ return data; } } } 

最好的方法是服务器发送非200响应(例如,HTTP 500)。 然后你可以处理网格的loadError或jQuery的全局ajaxError

如果你不能这样做,那么你可能需要使网格的datatype成为一个函数并自己执行$.ajax ,如果成功则调用网格的addXMLData方法。