只是想更好地了解JqGrid事件过程
基于此事件
ajax请求中向服务器添加过滤器或额外参数,我应该在loadBeforeSend中执行吗?因为我的工作要求我在向服务器发送请求时添加额外的参数,并且在收到数据之后,我需要阻止网格在网格上显示数据,以便我可以在显示处理数据之前进一步处理数据网格.但我似乎无法掌握JqGrid应该将我的功能放到哪个事件.
谢谢
编辑:
对于postData部分
loadBeforeSend: function() {
if (sessionStorage.pathStates == "edit" && location.pathname.indexOf("list") > -1) {
console.log("SUCCESS");
loadFilter();
}
},
Run Code Online (Sandbox Code Playgroud)
和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');
}
Run Code Online (Sandbox Code Playgroud)
至于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
}
},
Run Code Online (Sandbox Code Playgroud)
我觉得你的问题很有意思.我同意jqGrid的当前文档描述了事件和回调的处理不够清楚.所以我将在答案中首先详细描述处理过程.我将仅考虑datatype您需要(datatype: "json"或datatype: xml)的远程情况.稍后我会回复你的具体案例,并为你写下我的建议.
在调用beforeRequest回调jqGrid构建data参数之前,相应的Ajax请求将被发送到服务器.
prmNamesoption允许配置将按Ajax发送到服务器的标准参数的名称.相同的选项prmNames允许通过将相应的值设置为来删除一些参数null.postData选项允许扩展将发送到服务器的参数.postData选项的值将用于$.extend(参见此处)以将附加参数与标准参数组合.jqGrid使用结果postData选项作为jQuery.ajaxdata参数的值.jQuery允许使用字符串或具有函数属性的对象.在某些情况下,使用函数非常有用:请参阅答案以获取更多详细信息.data"stop"字符串false以停止稍后处理对服务器的请求.可以修改postData"jqGridBeforeRequest"事件句柄内的参数.beforeRequest工作方式与jQuery事件"jqGridBeforeRequest"完全相同,但每个网格只能定义一个回调.回调可以返回false停止请求.可以this用来访问网格的参数(参见答案).serializeGridData回调是过去控制将发送到服务器的信息的可能性.如果serializeGridData定义了回调,则应返回将发送到服务器的字符串或具有属性或函数的对象.返回的对象将用作jQuery.ajax的data参数值.postData.另外jQuery会调用loadBeforeSend.loadBeforeSend例如,可以使用回调来修改/扩展Ajax请求的HTTP头.请参阅答案提供代码示例.人们可以返回false从loadBeforeSend强制停止Ajax请求.现在jQuery,ajax等一下服务器的响应.如果需要,可以更改默认超时值.看到答案.
如果一个人从服务器获得响应并且响应包含成功的HTTP状态代码(值小于400),则jqGrid将响应解释为成功并以一种方式处理它.失败的回复将以另一种方式处理.
有一些重要的beforeProcessing,其允许回调预处理服务器响应之前它将通过的jqGrid进行处理.可以修改或扩展从服务器返回的数据.例如,请参阅答案.此外,jqGrid允许通过beforeProcessing回调来破坏服务器响应的标准处理.如果回调返回,false则jqGrid中断处理并忽略服务器响应.
然后jqGrid处理服务器响应.它将被解释为基于jqGrid选项的响应JSON或XML响应datatype.在处理数据期间,可以调用在(jsonReader或xmlReader参见此处)或在jsonmap/ xmlmap(在此处和此处示例中)中定义的一些其他回调函数.
处理完可见的数据页面后,jqGridGridComplete将触发事件,将gridComplete调用回调,然后jqGridAfterGridComplete触发.
在处理完整个服务器响应之后(如果使用loadonce: true选项,这一点尤为重要),jqGridLoadComplete将触发事件,loadComplete调用回调并jqGridAfterLoadComplete触发事件.
我建议你阅读答案,详细描述loadComplete和之间的差异gridComplete.
另一方面,如果服务器响应因超时而失败,或者因为响应包含失败的HTTP状态代码,则不会调用上述回调.而不是只loadError调用回调.答案详细讨论了回调.我严格建议loadError在使用jqGrid的所有生产代码中定义回调.它应该向服务器显示一些错误消息.
现在我回到你的具体案例.
我建议您postData在发送请求时使用添加额外参数.您可以直接将所有静态参数定义为属性.您可以将所有动态参数定义为函数.
另外我建议你使用beforeProcessing回调.例如,它允许停止网格显示数据.您可以读取和分析从服务器返回的数据.可以轻松修改数据(例如删除一些字段).
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |