新手疑问:如何将JavaScript中的数据变量传递至PHP?
解决JS通过AJAX向PHP传递数据的问题
你的代码里有几个关键错误导致无法获取数据,下面逐一说明并给出正确实现:
问题分析
- 变量名不匹配:你创建的请求对象是
myrequest,但设置请求头时用了xhr.setRequestHeader,这会导致报错,请求头未正确设置。 - 事件逻辑混乱:把
onload事件绑定放在了onreadystatechange的回调里,且send方法也嵌套在其中,导致请求发送时机错误。 - 数据格式与请求头不匹配:你设置的
Content-Type是application/x-www-form-urlencoded,但发送的是JSON字符串,PHP的$_POST只能解析前者格式的数据。
正确实现方式
方式一:使用application/x-www-form-urlencoded格式(PHP用$_POST获取)
这种格式是表单提交的默认格式,适合简单键值对数据:
var myrequest = new XMLHttpRequest(); // 绑定请求完成后的回调 myrequest.onload = function() { console.log(this.responseText); }; // 初始化POST请求 myrequest.open('POST', 'upload.php', true); // 设置正确的请求头 myrequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 拼接成urlencoded格式的字符串(如果是循环里的i,就改成`i=${i}`) let data = 'test=test'; // 发送请求 myrequest.send(data);
对应的PHP代码:
<?php // 检查并获取POST参数 if (isset($_POST['test'])) { echo $_POST['test']; } ?>
方式二:使用JSON格式传递(PHP解析原始请求体)
适合复杂结构的数据(比如对象、数组):
var myrequest = new XMLHttpRequest(); myrequest.onload = function() { console.log(this.responseText); }; myrequest.open('POST', 'upload.php', true); // 设置JSON格式的请求头 myrequest.setRequestHeader('Content-Type', 'application/json'); // 把数据转为JSON字符串(循环里的i可以写成`{'i': i}`) let data = JSON.stringify({'test': 'test'}); myrequest.send(data);
对应的PHP代码:
<?php // 读取原始请求内容并解析为JSON数组 $rawData = file_get_contents('php://input'); $data = json_decode($rawData, true); if (isset($data['test'])) { echo $data['test']; } ?>
调试注意事项
- 确认
upload.php的文件路径正确,和当前页面处于同一域名下(避免跨域问题) - 打开浏览器控制台的「Network」标签,查看请求的状态码、请求头和发送的数据,方便排查问题
内容的提问来源于stack exchange,提问作者Liwa Hadri
相关产品推荐
相关产品推荐

