jquery – 关于JqGrid流程事件

只是想更好地了解Jqgrid事件过程

> beforeRequest
> loadBeforeSend
> serializeGridData
> loadError
> gridComplete
> loadComplete

基于此事件

>如果我想在ajax请求中向服务器添加过滤器或额外参数,我应该在loadBeforeSend中执行吗?
>从服务器获取数据后,如果我想阻止数据显示在网格中(我想先进一步处理它,之后只显示处理过的数据),我应该在gridComplete中执行吗?

因为我的工作要求我在向服务器发送请求时添加额外的参数,并且在接收到数据之后,我需要阻止网格在网格上显示数据,以便我可以在显示处理后的数据之前进一步处理数据网格.但我似乎无法掌握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
     }
 },

解决方法

我觉得你的问题很有意思.我同意jqgrid的当前文档描述事件和回调的处理不够清楚.所以我将在答案中首先详细描述处理过程.我将仅考虑您需要的远程数据类型的情况(数据类型:“json”或数据类型:xml).稍后我会回复你的具体案例,并为你写下我的建议.

调用beforeRequest之前,回调jqgrid构建数据参数,使用相应的Ajax请求将其发送到服务器.

> prmNames选项允许配置将按Ajax发送到服务器的标准参数的名称.相同的选项prmNames允许通过将相应的值设置为null来删除一些参数.
> postData选项允许扩展将发送到服务器的参数. postData选项的值将在$.extend中使用(参见here),以将其他参数与标准参数组合在一起. jqgrid使用生成的postData选项作为jQuery.ajax的data参数的值.jQuery允许将数据用作字符串或具有函数属性的对象.在某些情况下,使用函数非常有用:有关详细信息,请参阅the answer.
>将触发jQuery事件“jqgridBeforeRequest”.可以返回“停止”字符串的假布尔值,以停止稍后处理对服务器的请求.可以修改“jqgridBeforeRequest”事件句柄中的postData参数.
> callback beforeRequest的工作方式与jQuery事件“jqgridBeforeRequest”完全相同,但每个网格只能定义一个回调.回调可以返回false以停止请求.可以使用它来访问网格的参数(参见the answer).
>可选的serializeGridData回调是过去控制将发送到服务器的信息的可能性.如果定义了回调serializeGridData,它应返回将发送到服务器的字符串或具有属性函数的对象.返回的对象将用作jQuery.ajax的数据参数的值.
>在处理Ajax请求期间,jQuery可以调用postData中定义的其他函数.另外jQuery将调用loadBeforeSend.例如,可以使用loadBeforeSend回调来修改/扩展Ajax请求的HTTP头.请参阅the answer提供的代码示例.可以从loadBeforeSend返回false以强制停止Ajax请求.

现在jQuery,ajax等待服务器的响应.如果需要,可以更改认超时值.见the answer.

如果一个人从服务器获得响应并且响应包含成功HTTP status code(值小于400),则jqgrid将响应解释为成功并以一种方式处理它.失败的回复将以另一种方式处理.

一个重要的beforeProcessing回调,它允许在jqgrid处理服务器响应之前对其进行预处理.可以修改或扩展从服务器返回的数据.例如,见the answer.另外,jqgrid允许通过beforeProcessing回调来破坏服务器响应的标准处理.如果回调返回false,则jqgrid中断处理并忽略服务器响应.

然后jqgrid处理服务器响应.它将被解释为基于jqgrid的数据类型选项的JSON或XML响应.在处理数据期间,可以调用jsonReader或xmlReader(参见here)中定义的或jsonmap / xmlmap中定义的一些其他回调函数(参见herehere示例).

处理完可见页面数据后,将触发jqgridGridComplete事件,将调用gridComplete回调,然后触发jqgridAfterGridComplete.

在处理整个服务器响应之后(如果使用loadonce:true选项,这一点尤其重要),将触发jqgridLoadComplete事件,将调用loadComplete回调并触发jqgridAfterLoadComplete事件.

我建议你阅读the answer,其中详细描述了loadComplete和gridComplete之间的区别.

另一方面,如果服务器响应因超时而失败,或者因为响应包含失败的HTTP状态代码,则不会调用上述回调.而不是只调用loadError回调. The answer详细讨论了回调.我严格建议在使用jqgrid的所有生产代码中使用defineload错误回调.它应该向服务器显示一些错误消息.

现在我回到你的具体案例.

我建议你在发送请求时使用postData添加额外的参数.您可以直接将所有静态参数定义为属性.您可以将所有动态参数定义为函数.

另外我建议你使用beforeProcessing回调.例如,它允许停止网格显示数据.您可以读取和分析从服务器返回的数据.可以轻松修改数据(例如删除一些字段).

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...