Javascript Ajax不向PHP发送变量

Javascript Ajax不向PHP发送变量,javascript,php,ajax,Javascript,Php,Ajax,我需要从JS发送变量,并在PHP代码中使用它。我编写了这个函数并用PHP下载了它。它不起作用,为什么 $("#gen").on("click", function () { request = new XMLHttpRequest(); var url = "file.php"; var test = "data="+document.getElementById("test").value; request.open("POST",url,true);

我需要从JS发送变量,并在PHP代码中使用它。我编写了这个函数并用PHP下载了它。它不起作用,为什么

$("#gen").on("click", function () {

    request = new XMLHttpRequest();

    var url = "file.php";

    var test = "data="+document.getElementById("test").value;


    request.open("POST",url,true);

    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    request.setRequestHeader("Content-length", test.length);


    request.onreadystatechange=checkResult;

    request.send(test);

    request.setRequestHeader("Connection", "close");

});

<form method="post" action="file.php">
以下是我的代码链接:-

使用此代码:

$test = $_POST['data'];

您将使用
$\u post['data']
在post请求中获取数据

因为您正在以
数据
发送它

所以,像这样更改代码

$test = $_POST['data'];
根据评论编辑:

您不需要任何JavaScript来完成“一次性发布和重定向”

只需按原样使用
,就可以将表单中的所有数据发布到PHP文件中。如果需要将其他变量传递到服务器,请在页面上创建一些
字段,并将它们的
设置为JS变量(使用
$(“#输入id”).val(yourVariable);


此代码回答了初始问题

客户端代码中的错误:

您在此按钮
中专门使用了
类型
提交
。这样做的目的是告诉浏览器停止一切并提交最近的表单。如果你想用一个按钮做其他事情,你必须使用它

$("#gen").on("click", function (e) {

    e.preventDefault();

    request = new XMLHttpRequest();

    var url = "file.php";

    var test = "data="+document.getElementById("test").value;


    request.open("POST",url,true);

    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    request.setRequestHeader("Content-length", test.length);


    request.onreadystatechange=checkResult;

    request.send(test);

    request.setRequestHeader("Connection", "close");

});
e.preventDefault()
告诉浏览器不要执行
type=“submit
命令的操作,而是运行js代码

其他人是对的,您可以使用
$test=$\u POST[“data”];
获取数据。原因如下:

发送数据时,您构建一个
x-www-form-urlencoded
字符串(此字符串:
“Data=“+document.getElementById(“test”).value;

对于您和您的连接来说,这只是一个附加到请求中的字符串,但是您的服务器(您的
文件.php
)将其解释为一个关联数组,这意味着一个带有
键(Data)和
值的数据结构(
document.getElementById(“test”).value
)。当您提交表单时,浏览器会自动执行此操作,它会将表单中的所有数据附加到您的请求中,并以这种方式将其发送到服务器


每个添加数据的请求都遵循此模式。例如,当您查看YouTube时,它们的视频URL都包含
?v=…
。如果您想在PHP中构建YouTube,您可以使用
$video=$\u get[“v”]

获取变量,使用
$test=$\u POST['data'];
-既然您发送了
“数据”,那么如何=“
使用jquery ajax发送变量,或$test=$\u POST['data']使用print\r($\u POST)获取索引。
使用jquery
——就像使用大锤挂图片一样hook@MagnusEriksson-true dat-甚至没有注意到
$
并且没有jQuery标记-仍然会失败,因为服务器代码就是错误所在:pI引入了您的更改$test=$\u POST['data'];回声试验;我在第17行收到了未定义的索引:C:\xampp\htdocs\generator kart\file.php中的数据,为什么?使用
print\r($\u POST)你在数组中得到了什么?数组([k-title]=>[k-desc]=>)真奇怪。你能把你的HTML添加到你的问题中吗?似乎按钮除了执行js@unknown_dude您是否向我们展示了问题中的正确代码?该代码无法发布您声称获得的数组。我按照您所说的做了,但现在在单击#gen之后,完全没有发生任何事情,尽管文件的路径没有问题。您说的“没有发生”是什么意思?如果你的意思是我想得到以下效果,那么你的站点不应该重新加载:单击“生成”后,页面重新加载并重定向到file.php,此时将变量从JS发送到php,我可以稍后在JS中调用。如果我的想法错了,还有别的办法,请让我纠正你。我才刚开始,我不想从一开始就养成坏习惯。你所做的就是让你的数据在后台发送到你的php文件。如果您希望重定向到该页面,则根本不需要任何javascript
$("#gen").on("click", function (e) {

    e.preventDefault();

    request = new XMLHttpRequest();

    var url = "file.php";

    var test = "data="+document.getElementById("test").value;


    request.open("POST",url,true);

    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    request.setRequestHeader("Content-length", test.length);


    request.onreadystatechange=checkResult;

    request.send(test);

    request.setRequestHeader("Connection", "close");

});