如何使 url 人类可读的免费 jqgrid 过滤器

How to make free jqgrid filter in url human readable

免费的 jqgrid 使用 json 格式从服务器读取数据。 使用jqgrid高级搜索、工具栏搜索或在代码中创建过滤条件。

使用

从GET请求查询字符串filters参数中读取
   var urlFilters,
       namedParameters =  window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'),
                        parameters = {},
                        nameAndValue,
   $grid = $("#grid"), i;
                for (i = 0; i < namedParameters.length; i += 1) {
                    nameAndValue = namedParameters[i].split('=');
                    parameters[nameAndValue[0]] = decodeURIComponent(nameAndValue[1]);
                    if (nameAndValue[0] === "filters") {
                        urlFilters= decodeURIComponent(nameAndValue[1]);
                    }
                }
                $grid.jqGrid({
                    postData: { filters: urlFilters }
                    datatype: "json",

这需要传递编码过滤器条件 url,这是人类不可读和不可编辑的:

http://localhost//Desktop?filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22Baas%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%22KLIENT%22%7D%2C%7B%22field%22%3A%22Liigid%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%22%22%7D%5D%7D

有时用户需要直接编辑浏览器url来创建新的过滤条件?

如何使 url 人类可读以便直接编辑? 如何强制 jqgrid 以 OData 或其他格式创建高级和工具栏搜索条件,这些条件在传入 url 时不需要使用 % 进行转义?

免费的jqgrid有OData插件。 如何从这个插件中提取 OData 搜索过滤器创建并允许 jqgrid 以这种格式序列化搜索条件并将其解析回显示在高级搜索过滤器中? 或者是否可以修改当前搜索条件,以便其中不使用 " (%22)?

and in How one could use server side sorting and paging with Azure Mobile Services

中有相关问题

但我不知道哪种方法最好。

OData 不是严格要求的。也许免费 jqgrid 搜索条件序列化器和反序列化器的一些简单更改允许在 URL 中进行人工编辑。然而,使用 OData 使 API 更加标准化。

使用

ASP.NET MVC4 和 jquery。

我个人使用Fiddler非常活跃。它是免费工具,可从 here 下载。 Fiddler 允许捕获完整的 HTTP 流量。它还包括一些简化典型 HTTP 流量编码和解码的工具。

启动 Fiddler 后,您可以在工具中选择菜单项 "TextWizard" 或使用 Ctrl+E。之后,您将获得非常简单的界面,允许您 decode/encode filters 值。例如,您可以在向导的顶部插入问题 %7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22Baas%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%22KLIENT%22%7D%2C%7B%22field%22%3A%22Liigid%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%22%22%7D%5D%7D 中的过滤器值,然后选择 URL 解码为转换操作。您将立即看到解码结果

您可以复制结果修改它并解码回来。例如过滤器 Name cn "bob" 应该写成 {"groupOp":"AND","rules":[{"field":"Name","op":"cn","data":"bob"}]}。使用相同的工具并选择 URL 编码操作,您将获得

因此您可以使用 filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22Name%22%2C%22op%22%3A%22cn%22%2C%22data%22%3A%22bob%22%7D%5D%7D 作为 URL。