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

新手疑问:如何将JavaScript中的数据变量传递至PHP?

解决JS通过AJAX向PHP传递数据的问题

你的代码里有几个关键错误导致无法获取数据,下面逐一说明并给出正确实现:

问题分析

  1. 变量名不匹配:你创建的请求对象是myrequest,但设置请求头时用了xhr.setRequestHeader,这会导致报错,请求头未正确设置。
  2. 事件逻辑混乱:把onload事件绑定放在了onreadystatechange的回调里,且send方法也嵌套在其中,导致请求发送时机错误。
  3. 数据格式与请求头不匹配:你设置的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:19:21