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

Javascript与PHP间XHR数据传输异常问题求助

PHP与XHR数据传输问题排查与解决

问题描述

  • JS请求发送成功,但无法进入PHP的if ($_SERVER["REQUEST_METHOD"] == "POST")判断块,重启电脑前该功能可正常运行;
  • 成功接收数据时,获取到的值为“1”,但JS已设置发送的静态数据为“4”。

相关代码

JavaScript代码

let xhr = new XMLHttpRequest();
let dataStorage = new FormData();
dataStorage.append('dataStorage', 4);

console.log("Data yang dikirim:", dataStorage.get('dataStorage'));

xhr.open('POST', 'sistemDB.php', true);
xhr.onload = function() {
    if (xhr.status === 200) {
        console.log("AJAX request completed with status: " + xhr.status);
        // console.log(xhr.responseText);
    } else {
        console.log("AJAX request failed with status: " + xhr.status);
    }
};
xhr.onerror = function() {
    console.log("Request failed");
};
xhr.send(dataStorage);
console.log("Send berhasil");

PHP代码(位于sistemDB.php)

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    echo '<pre>';
    var_dump($_POST); // Display all POST data
    echo '</pre>';

    // Alternative way to check raw POST data
    echo '<pre>';
    echo 'Raw POST data: ' . file_get_contents('php://input');
    echo '</pre>';

    if (isset($_POST['dataStorage'])) {
        $data = $_POST['dataStorage'];
        echo htmlspecialchars($data); // Use htmlspecialchars to prevent XSS attacks
    } else {
        echo 'dataStorage not set';
    }
}
?>

排查与解决方案

针对问题1:无法进入POST判断块

  1. 确认请求实际方法:打开浏览器开发者工具(F12)→「网络」面板,找到sistemDB.php请求,查看「请求方法」是否为POST。如果显示为GET,可能是浏览器缓存或服务器重定向导致请求方法变更。
  2. 清除浏览器缓存:按Ctrl+F5强制刷新页面,避免旧缓存的GET请求干扰。
  3. 检查服务器重定向规则:查看Apache/Nginx的rewrite配置,或PHP代码中是否有header()跳转语句,这类操作可能会将POST请求转为GET。
  4. 直接验证请求方法:在PHP代码最顶部添加以下代码,查看实际请求方法:
    var_dump($_SERVER["REQUEST_METHOD"]);
    exit;
    

针对问题2:接收值为“1”而非“4”

  1. 确认发送前数据未被修改:在JS的xhr.send(dataStorage);前新增打印语句,再次确认数据:
    console.log("Before send:", dataStorage.get('dataStorage'));
    
  2. 查看PHP端完整输出:取消JS中console.log(xhr.responseText);的注释,查看PHP返回的var_dump($_POST)和原始POST数据,确认是否有其他同名参数覆盖了dataStorage的值。
  3. 检查服务器全局过滤:查看php.ini配置中的auto_globals_jit、magic_quotes_gpc等参数,或项目中是否有自定义的POST数据过滤函数,这类配置/函数可能会篡改传入的数值。
  4. 排查其他代码干扰:检查sistemDB.php文件中是否有其他PHP代码,在当前POST判断块之前修改了$_POST数组。

通用排查点

  • 重启服务器服务:重启Apache/Nginx和PHP-FPM(如果使用),排除服务进程异常导致的处理错误。
  • 查看PHP错误日志:找到服务器的PHP错误日志文件(通常在/var/log/php/或服务器面板的日志模块),检查是否有未捕获的错误或警告信息。

内容的提问来源于stack exchange,提问作者Muhammad Rifqi Amir Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:38:15