1

我有一个带有以下寻呼机的 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()

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

4

1 回答 1

2

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

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

获得. filters_postData

更新: 我永远不会相信在客户端创建的 SQL 语句片段。如果您在服务器代码中使用从客户端发送的 SQL 片段,您将允许自动进行SQL 注入。如果安全性在您的应用程序中发挥作用,则不应使用 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);
    }
});

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

于 2012-10-18T09:54:30.053 回答