【问题标题】:jqGrid multipleGroup send query to serverjqGrid multipleGroup 向服务器发送查询
【发布时间】:2012-10-19 18:09:54
【问题描述】:

我有一个带有以下寻呼机的 jqGrid

.navGrid('#pager-mm',{add:false,edit:false,del:false,search:true,view:true},
 {},{},{},
 {multipleSearch:true,multipleGroup:true,showQuery: true},
 {})

当我构建具有嵌套 AND 和 OR 分组的复杂查询时,jqGrid 在客户端将正确的查询构建为字符串。我不想在我的服务器上重新构建相同的查询编写额外的代码,而是想将正确构建的客户端查询作为字符串发送到服务器。然而,

beforeSumbit:function()

在我搜索时没有被触发。如何将此自定义字符串发送到我的服务器?

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    我不完全明白你真正想要什么。默认情况下,过滤器将作为filters 参数发送到服务器。不过,您可以使用 onSearch 回调来访问搜索过滤器。你可以使用

    var filters = $(this).jqGrid("getGridParam", "postData").filters;
    

    获取postDatafilters 属性。

    已更新:我将永远不会相信在客户端创建的 SQL 语句片段。如果您在服务器代码中使用从客户端发送的 SQL 片段,您将自动允许SQL Injection。如果安全性在您的应用程序中发挥作用,则不应使用 jqGrid 创建的 SQL 语句。

    但是,如果您的问题具有纯理论性质,您可以使用搜索过滤器的toSQLString 方法在搜索对话框中显示 SQL 语句。对应的代码如下所示

    grid.jqGrid('navGrid', '#pager', {edit: false, add: false, del: false}, {}, {}, {}, {
        multipleSearch: true,
        multipleGroup: true,
        showQuery: true,
        recreateFilter: true,
        onSearch: function () {
            var $filter = $("#" + $.jgrid.jqID("fbox_" + this.id)),
                sql = $filter.jqFilter('toSQLString');
            alert(sql);
        }
    });
    

    您将找到相应的演示here。顺便说一句,您不需要使用showQuery: true 就可以使用toSQLString 方法。

    【讨论】:

    • 启用 showQuery:true 后,实际查询是在客户端构建的。有没有办法将此查询传递给服务器,还是我必须在客户端重建整个查询?我终于在 json 字符串中找到了“Group”数组,用 groupOp 和规则构建每个组,但是将预构建的查询传递给服务器会容易得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多