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

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);

额外检查点

  1. 可在PHP开头添加var_dump(file_get_contents('php://input'));,查看原始POST数据是否正确传递,判断是前端编码问题还是后端解析问题。
  2. 检查服务器post_max_size配置,如果contents内容过大,可能导致数据被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:07:55