我需要从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['test'];
以下是我的代码的链接: - Pastebin link
答案 0 :(得分:3)
使用此代码:
$test = $_POST['data'];
答案 1 :(得分:2)
您将使用$_POST['data']
在帖子请求中获取数据。
因为您是在data
发送的。
所以,改变你的代码,
$test = $_POST['data'];
答案 2 :(得分:1)
根据this评论编辑:
您不需要任何JavaScript来完成&#34;一次性发布和重定向&#34;。
只需按原样使用<input type="submit" id="gen" value="Generate" />
即可将表单中的所有数据发布到PHP文件中。如果您需要将其他变量传递到您的服务器,请在您的网页上添加几个<input type="hidden">
字段,并使其value
成为您的JS变量(使用$("#input-id").val(yourVariable);
)
此代码回答了最初的问题
客户端代码中的错误:
您在此按钮type
中专门使用了submit
<input type="submit" id="gen" value="Generate" />
。这样做是告诉浏览器停止所有内容并提交最近的表单。如果您想使用按钮执行其他操作,则必须使用
$("#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 = $_POST["data"];
获取数据。这就是原因:
发送数据时,您需要构建一个x-www-form-urlencoded
字符串(这一个:"data="+document.getElementById("test").value;
)。
对于您和您的连接,这只是一个附加到您的请求的字符串,但您的服务器(您的file.php
)将此解释为关联数组,这意味着数据结构具有{{1} }(数据)和key
(value
)。当您提交表单时,浏览器会自动执行此操作,它会将表单中的所有数据附加到您的请求中,并以此方式将其发送到服务器。
每个添加数据的请求都遵循此模式。当您查看YouTube示例时,他们的视频网址都是contian document.getElementById("test").value
。如果您想在PHP中构建YouTube,则可以使用?v=...
获取变量。