JS使用new FormData拼接表单值时开头出现undefined问题排查
问题根本原因
- 未初始化变量的默认值规则:你最初的代码中
var additem;仅声明变量未赋初始值,JS 中var声明未赋值的变量默认值为undefined。执行additem += value + '|'操作时,本质是做字符串拼接,undefined会被强制转换为字符串"undefined",因此会拼接在第一个取值的前面。 - 初始化空字符串后仍报错的常见诱因:你提到尝试过
var additem = '';仍出现问题,基本是初始化时机错误导致:要么是空字符串赋值写在了循环执行之后,循环运行时additem还是未赋值状态;要么是变量作用域冲突,其他位置的重复声明/赋值覆盖了空字符串的初始值。
修复方案
方案1:修正初始化时机
确保空字符串赋值在循环执行之前即可:
// 循环执行前先显式初始化为空字符串 var additem = ''; var frm = document.getElementById('prd2'); var data = new FormData(frm); for (var value of data.values()) { additem += value + '|'; }
方案2(更稳妥):用数组拼接避免初始值问题
直接把FormData的取值转成数组后调用join方法拼接,完全不需要处理初始值问题,还能灵活控制是否保留末尾的分隔符:
var frm = document.getElementById('prd2'); var data = new FormData(frm); // 需要末尾带|就写这句 var additem = Array.from(data.values()).join('|') + '|'; // 不需要末尾带|就用这句:var additem = Array.from(data.values()).join('|');
内容的提问来源于stack exchange,提问作者MrCycling
相关产品推荐
相关产品推荐

