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判断块
- 确认请求实际方法:打开浏览器开发者工具(F12)→「网络」面板,找到
sistemDB.php请求,查看「请求方法」是否为POST。如果显示为GET,可能是浏览器缓存或服务器重定向导致请求方法变更。 - 清除浏览器缓存:按
Ctrl+F5强制刷新页面,避免旧缓存的GET请求干扰。 - 检查服务器重定向规则:查看Apache/Nginx的rewrite配置,或PHP代码中是否有
header()跳转语句,这类操作可能会将POST请求转为GET。 - 直接验证请求方法:在PHP代码最顶部添加以下代码,查看实际请求方法:
var_dump($_SERVER["REQUEST_METHOD"]); exit;
针对问题2:接收值为“1”而非“4”
- 确认发送前数据未被修改:在JS的
xhr.send(dataStorage);前新增打印语句,再次确认数据:console.log("Before send:", dataStorage.get('dataStorage')); - 查看PHP端完整输出:取消JS中
console.log(xhr.responseText);的注释,查看PHP返回的var_dump($_POST)和原始POST数据,确认是否有其他同名参数覆盖了dataStorage的值。 - 检查服务器全局过滤:查看
php.ini配置中的auto_globals_jit、magic_quotes_gpc等参数,或项目中是否有自定义的POST数据过滤函数,这类配置/函数可能会篡改传入的数值。 - 排查其他代码干扰:检查
sistemDB.php文件中是否有其他PHP代码,在当前POST判断块之前修改了$_POST数组。
通用排查点
- 重启服务器服务:重启Apache/Nginx和PHP-FPM(如果使用),排除服务进程异常导致的处理错误。
- 查看PHP错误日志:找到服务器的PHP错误日志文件(通常在
/var/log/php/或服务器面板的日志模块),检查是否有未捕获的错误或警告信息。
内容的提问来源于stack exchange,提问作者Muhammad Rifqi Amir Putra
相关产品推荐
相关产品推荐

