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

jQuery表单序列化提交Zapier:去除参数前缀与括号问题

问题:如何修改jQuery代码实现无前缀的表单参数推送?

我有一个需推送数据至Zapier的表单,使用jQuery将表单输入序列化为数组后通过reduce方法处理,代码如下:

$(function() {
    $("#lead-gen-form").submit(function() {
        const formInputSerializedArray = $(this).serializeArray();
        const ajaxData = formInputSerializedArray.reduce((acc, { name, value }) => ({ ...acc, [name]: value }), {});
        $.ajax({
            url: "",
            type: "POST",
            data: { ajaxData },
            dataType: "jsonp",
            cache: false,
            success: function(data) {
                window.location = "../sent";
            },
        });
        return false;
    });
});

当前提交的参数会包含ajaxData前缀并在输入名称外添加括号,结果如下:

ajaxData[utm_campaign]: test
ajaxData[utm_term]: 12
ajaxData[utm_content]: comm
ajaxData[utm_medium]: email
ajaxData[utm_source]: sig

我期望得到的参数格式为:

utm_campaign: test
utm_term: 12
utm_content: comm
utm_medium: email
utm_source: sig

请问如何修改代码以实现该需求?


解决方案

问题出在$.ajax的data参数配置上:你使用了{ ajaxData }的对象简写语法,这会把已经处理好的扁平ajaxData对象,再包裹到一个键为ajaxData的外层对象里,最终导致请求参数带上前缀。

只需要将data: { ajaxData }修改为data: ajaxData,直接传递处理后的扁平对象作为请求参数即可。

修改后的完整代码:

$(function() {
    $("#lead-gen-form").submit(function() {
        const formInputSerializedArray = $(this).serializeArray();
        const ajaxData = formInputSerializedArray.reduce((acc, { name, value }) => ({ ...acc, [name]: value }), {});
        $.ajax({
            url: "",
            type: "POST",
            data: ajaxData, // 直接传递处理后的参数对象
            dataType: "jsonp",
            cache: false,
            success: function(data) {
                window.location = "../sent";
            },
        });
        return false;
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:11:31