Ajax不向PHP发送变量

时间:2017-07-27 06:30:56

标签: 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);

    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

3 个答案:

答案 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} }(数据)和keyvalue)。当您提交表单时,浏览器会自动执行此操作,它会将表单中的所有数据附加到您的请求中,并以此方式将其发送到服务器。

每个添加数据的请求都遵循此模式。当您查看YouTube示例时,他们的视频网址都是contian document.getElementById("test").value。如果您想在PHP中构建YouTube,则可以使用?v=...获取变量。