FormData未按预期传递至XMLHttpRequest,PHP端解析异常求助
问题解决方案
核心原因
你大概率手动设置了Content-Type请求头,或者请求头被其他代码篡改了。发送FormData时,XMLHttpRequest会自动生成包含boundary的正确Content-Type(格式如multipart/form-data; boundary=----WebKitFormBoundaryxxxx),如果只设置Content-Type: multipart/form-data而不带boundary,PHP无法识别表单数据的分隔符,就会把整个请求体当成单个键值对解析。
修正代码
删除手动设置Content-Type的代码,让XHR自动处理请求头:
let _data = new FormData(); for (var key in req) { var value = req[key]; _data.append(key, value); } let xhr = new XMLHttpRequest(); xhr.open("POST", qb_url, true); // 不要手动添加Content-Type请求头! xhr.send(_data);
额外排查点
- 检查是否有全局请求拦截器(比如自定义XHR钩子、第三方请求库拦截)修改了请求头
- 确认
req对象中的键值对没有包含和boundary冲突的特殊字符(不过从你的异常结果看,核心问题还是请求头) - 若特殊场景必须自定义请求头,需保留自动生成的boundary:
// 仅特殊需求下使用,不推荐 xhr.setRequestHeader('Content-Type', xhr.getResponseHeader('Content-Type'));
内容的提问来源于stack exchange,提问作者Dave Playfair
相关产品推荐
相关产品推荐

