PHP无法处理XMLHTTP POST请求问题求助
问题分析与解决
核心问题:POST数据格式错误
你的JS代码直接拼接POST数据时,未对contents中的特殊字符做URL编码,导致服务器无法正确解析$_POST数组。比如contents包含&、=、空格或HTML实体时,会破坏application/x-www-form-urlencoded格式的结构,PHP无法识别完整参数。另外,代码里的document.innerHTML是错误写法,document对象没有该属性,应改为document.body.innerHTML,否则会抛出JS错误。
修复后的JS代码
方案1:使用URLSearchParams(推荐,自动处理编码)
let textarea = document.getElementsByTagName("code")[0]; let contents = textarea.innerHTML; // 用URLSearchParams构造编码后的POST数据 let postData = new URLSearchParams(); postData.append('action', 'save'); postData.append('contents', contents); let xhr = new XMLHttpRequest(); xhr.onload = function() { if (xhr.status === 200) { console.log(xhr.responseText); // 修复innerHTML的错误 document.body.innerHTML += "<div class='banner'>Saved</div>"; } }; xhr.open('POST', "http://testingserverjts.infinityfreeapp.com/FileManager/edit.php"); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.send(postData);
方案2:手动编码参数(兼容旧浏览器)
let textarea = document.getElementsByTagName("code")[0]; let contents = textarea.innerHTML; // 分别编码参数键值对 let post = `action=${encodeURIComponent('save')}&contents=${encodeURIComponent(contents)}`; let xhr = new XMLHttpRequest(); xhr.onload = function() { if (xhr.status === 200) { console.log(xhr.responseText); document.body.innerHTML += "<div class='banner'>Saved</div>"; } }; xhr.open('POST', "http://testingserverjts.infinityfreeapp.com/FileManager/edit.php"); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.send(post);
额外检查点
- 可在PHP开头添加
var_dump(file_get_contents('php://input'));,查看原始POST数据是否正确传递,判断是前端编码问题还是后端解析问题。 - 检查服务器
post_max_size配置,如果contents内容过大,可能导致数据被截断。
内容的提问来源于stack exchange,提问作者Jsheerin
相关产品推荐
相关产品推荐

