You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jqGrid多选列过滤器:如何将多值以数组格式而非逗号分隔发送?

解决jqGrid多选过滤器参数格式冲突问题

核心思路

问题根源在于多选过滤器默认用逗号拼接选项,但选项本身包含逗号导致后端无法拆分。我们需要两步处理:先修改多选选项的分隔符避开逗号,再通过jqGrid的参数序列化回调修改最终请求格式。

方案1:生成重复Key的请求参数(?keyB=fname1, gname1&keyB=fname2, gname2)

通过serializeGridData回调拆分选项并生成重复Key:

$("#yourGridId").jqGrid({
    // 其他网格配置
    colModel: [
        // 其他列配置
        {
            name: "keyB",
            searchoptions: {
                multiple: true,
                // 把默认逗号分隔符改成非冲突字符,比如竖线
                delimiter: "|",
                // 你的其他搜索配置(如dataUrl等)
            }
        }
    ],
    serializeGridData: function(postData) {
        const processedData = {};
        $.each(postData, (key, value) => {
            if (key === "keyB" && typeof value === "string") {
                // 用自定义分隔符拆分选项
                const options = value.split("|");
                // 生成重复Key的数组格式
                processedData[key] = options;
            } else {
                processedData[key] = value;
            }
        });
        // 第二个参数true会将数组转为重复Key格式
        return $.param(processedData, true);
    }
});

方案2:生成JSON数组格式参数(?keyB=["familyName1, givenName1", "famylyName2, givenName2"])

同样修改分隔符后,将选项序列化为JSON字符串:

$("#yourGridId").jqGrid({
    colModel: [
        {
            name: "keyB",
            searchoptions: {
                multiple: true,
                delimiter: "|",
            }
        }
    ],
    serializeGridData: function(postData) {
        if (postData.keyB && typeof postData.keyB === "string") {
            const options = postData.keyB.split("|");
            // 将选项转为JSON数组字符串
            postData.keyB = JSON.stringify(options);
        }
        return $.param(postData);
    }
});

后端接收到参数后直接解析JSON即可得到完整选项数组。

方案3:生成带引号包裹的参数(?keyB="familyName1, givenName1", "famylyName2, givenName2")

适合后端支持直接解析带引号的逗号分隔字符串:

$("#yourGridId").jqGrid({
    colModel: [
        {
            name: "keyB",
            searchoptions: {
                multiple: true,
                delimiter: "|",
            }
        }
    ],
    serializeGridData: function(postData) {
        if (postData.keyB && typeof postData.keyB === "string") {
            const options = postData.keyB.split("|");
            // 给每个选项加引号后用逗号拼接
            postData.keyB = options.map(opt => `"${opt}"`).join(",");
        }
        return $.param(postData);
    }
});

关键注意事项

  • 必须修改searchoptions.delimiter为非逗号字符,否则无法区分选项内部逗号和选项之间的分隔符,这是所有方案的前提。
  • serializeGridData是jqGrid专门用来修改请求参数的回调,所有参数格式调整都在这里完成。

内容的提问来源于stack exchange,提问作者Tommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:15:35