只是想更好地了解JqGrid
事件流程
基于此事件
ajax
请求中向服务器添加过滤器或额外参数,我应该在 loadBeforeSend 中执行此操作吗?因为我的工作要求我在向服务器发送请求时添加额外的参数,并且在收到数据后,我需要阻止网格在网格上显示数据,以便我可以在显示数据之前进一步处理数据处理网格上的数据。但是我似乎无法掌握JqGrid应该把我的功能放到哪个事件。
由于
编辑:
对于postData部分
loadBeforeSend: function() {
if (sessionStorage.pathStates == "edit" && location.pathname.indexOf("list") > -1) {
console.log("SUCCESS");
loadFilter();
}
},
和loadFilter
function loadFilter() {
var filter = JSON.parse(sessionStorage.filter);
var filterInput = [],
model = [],
filters = {};
filterInput = filter.filterInput;
model = filter.model;
var grid = filter.grid,
page = filter.page,
op = "bw",
a = 0,
b = 0;
filters = {
groupOp: "AND",
rules: []
};
for (var i = 0; i < model.length; i++) {
if (filterInput[a].length > 0) {
filters.rules.push({
field: model[a],
op: "bw",
data: filterInput[a]
});
}
a++;
}
$(grid).jqGrid('setGridParam', {
search: true,
postData: {
filters: JSON.stringify(filters)
}
}).trigger('reloadGrid');
}
对于beforeProcessing,我还不知道这个。但是我心中的过程就是这样的
beforeProcessing: function(data) {
if (sessionStorage.pathStates == "edit" && location.pathname.indexOf("list") > -1) { >>
Filter data based on certain criterias, like
for example, changing one of the column format, or only displaying data that has the value of xxx on certain column >>
Return the filtered data
}
},
答案 0 :(得分:6)
我觉得你的问题很有意思。我同意jqGrid的当前文档描述了事件和回调的处理不够清楚。因此,我将在答案中首先详细描述处理过程。我将仅考虑您需要的远程datatype
(datatype: "json"
或datatype: xml
)的情况。之后我会回复你的具体案例,并为你写下我的建议。
在调用相应的Ajax请求中使用的beforeRequest
回调jqGrid构建data
参数之前,将其发送到服务器。
prmNames
选项允许配置标准参数的名称,这些参数将按Ajax发送到服务器。相同的选项prmNames
允许通过将相应的值设置为null
来删除一些参数。 postData
选项允许扩展参数,这些参数将发送到服务器。 postData
选项的值将在$.extend
中使用(请参阅here),以将其他参数与标准参数相结合。 jqGrid使用生成的postData
选项作为jQuery.ajax的data
参数的值。 jQuery允许将data
用作字符串或具有 functions 属性的对象。在某些情况下,使用函数非常有用:有关详细信息,请参阅the answer。"stop"
false
布尔值的字符串,以停止稍后处理对服务器的请求。可以修改&#34; jqGridBeforeRequest&#34;内的postData
参数。事件处理。beforeRequest
的工作原理与jQuery事件&#34; jqGridBeforeRequest&#34;完全相同,但每个网格只能定义一个回调。回调可以返回false
来停止请求。可以使用this
来访问网格的参数(请参阅the answer)。serializeGridData
回调是过去控制将发送到服务器的信息的可能性。如果定义了回调serializeGridData
,则应返回将发送到服务器的字符串或具有属性或函数的对象。返回的对象将用作jQuery.ajax的data
参数的值。postData
中定义的其他函数。另外jQuery会调用loadBeforeSend
。例如,可以使用loadBeforeSend
回调来修改/扩展Ajax请求的HTTP头。请参阅the answer提供代码示例。可以从false
返回loadBeforeSend
以强制停止Ajax请求。现在jQuery,ajax
等待服务器的响应。如果需要,可以更改默认超时值。请参阅the answer。
如果一个人从服务器获得响应并且响应包含成功HTTP status code(值小于400),则jqGrid将响应解释为成功并以一种方式处理它。失败的回复将以另一种方式处理。
重要的beforeProcessing
回调允许预处理服务器响应,之后将由jqGrid处理。可以修改或扩展从服务器返回的数据。例如,请参阅the answer。此外,jqGrid允许通过beforeProcessing
回调来破坏服务器响应的标准处理。如果回调返回false
,则jqGrid会中断处理并忽略服务器响应。
然后jqGrid处理服务器响应。它将被解释为基于jqGrid的JSON
选项的XML
或datatype
响应。在处理数据期间,在jsonReader
或xmlReader
内部定义了一些其他回调函数(请参阅here)或在jsonmap
/ xmlmap
中定义(参见{{3可以调用}和here例子。
在处理完可见的数据页面后,将触发jqGridGridComplete
事件,将调用gridComplete
回调,然后触发jqGridAfterGridComplete
。
在处理完整个服务器响应后(如果您使用loadonce: true
选项,它会特别重要),将触发jqGridLoadComplete
事件,将调用loadComplete
回调并且<{1}}事件将被触发。
我建议您阅读here,其中详细介绍了jqGridAfterLoadComplete
和loadComplete
之间的差异。
另一方面,如果服务器响应因超时而失败,或者因为响应包含失败的HTTP状态代码,则不会调用上述回调。而不是只调用gridComplete
回调。 the answer详细讨论了回调。我严格建议在使用jqGrid的所有生产代码中定义loadError
回调。它应该向服务器显示一些错误消息。
现在我回到你的具体案例。
我建议您在发送请求时使用loadError
添加额外参数。您可以直接将所有静态参数定义为属性。您可以将所有动态参数定义为函数。
此外,我建议您使用postData
回调。例如,它允许停止网格显示数据。您可以读取和分析从服务器返回的数据。可以轻松修改数据(例如删除一些字段)。