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

jQuery序列化表单后调用append/push报TypeError错误,如何解决?

解决serialize()后无法append参数的问题

错误原因

$('form').serialize() 方法返回的是URL编码的字符串(格式类似 text=输入值&textw=输入值),并不是数组、对象或jQuery集合,因此不存在 append()、push() 这类方法,调用时自然会抛出类型错误。

解决方案

方法1:直接拼接字符串(最简单)

利用URL参数的拼接规则,直接用 & 连接新参数:

$('form').on('submit', function(e) {
    e.preventDefault();
    let formata = $('form').serialize();
    // 拼接新参数,参数值含特殊字符时建议用encodeURIComponent编码
    formata += '&id=' + encodeURIComponent('1300');
    console.log(formata)
})

方法2:用serializeArray()转数组后扩展

serializeArray() 会将表单数据转为包含 name 和 value 的对象数组,可通过 push() 添加新参数,再用 $.param() 转回URL编码字符串:

$('form').on('submit', function(e) {
    e.preventDefault();
    let formDataArr = $('form').serializeArray();
    // 添加新参数到数组
    formDataArr.push({ name: 'id', value: '1300' });
    // 转换为URL编码字符串
    let formata = $.param(formDataArr);
    console.log(formata)
})

方法3:使用FormData对象(适合复杂场景)

现代浏览器支持 FormData 对象,原生支持 append() 方法,还能处理文件上传等场景:

$('form').on('submit', function(e) {
    e.preventDefault();
    // 基于当前表单创建FormData
    let formData = new FormData(this);
    // 添加新参数
    formData.append('id', '1300');
    // 如需转为字符串查看,可借助URLSearchParams
    console.log(new URLSearchParams(formData).toString());
    // FormData可直接用于jQuery ajax提交,无需转字符串
    // $.ajax({ url: 'xxx', method: 'POST', data: formData, processData: false, contentType: false })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:48