2017-07-27 102 views
-2

我需要从JS发送变量并在PHP代码中使用它。我编写了这个函数并用PHP下载了它。它不起作用,为什么?Ajax不会向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

+5

如何使用'$ test = $ _POST ['data'];' - 因为您发送''data =“' –

+0

使用jquery ajax发送变量或$ test = $ _POST ['data'] – mmmorgen

+1

print_r($ _ POST)获取索引。 – mmmorgen

回答

1

编辑按this评论:

你不需要任何JavaScript来完成“后,并一气呵成重定向”。

直接使用您的<input type="submit" id="gen" value="Generate" />,它应该将表单中的所有数据发布到您的PHP文件中。如果你需要其他的变量传递到您的服务器,让你的页面上几个<input type="hidden">领域,使他们value是你的JS变量(使用$("#input-id").val(yourVariable);


本准则回答最初的问题

您客户端代码中的错误:

您在此按钮<input type="submit" id="gen" value="Generate" />中专门使用了typesubmit。所做的就是告诉浏览器停止一切并提交最近的表单。如果你不是想做些别的事情的一个按钮,你必须使用

$("#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)将此解释为一个关联数组,这意味着有key(数据)的数据结构和valuedocument.getElementById("test").value)。提交表单时,浏览器会自动执行此操作,它会将表单中的所有数据附加到您的请求中,并以此方式将其发送到服务器。

添加数据的每个请求均遵循此模式。当你看一下YouTube的例子时,他们的视频网址都是conten ?v=...。如果你想用PHP构建YouTube,你会得到使用$video = $_GET["v"]的变量。

+0

我照你所说的做了,但是现在点击#gen后完全没有任何反应,尽管文件的路径没问题。 –

+0

你的意思是什么都没有发生? – Luca

+0

你的网站不应该重新加载,如果你的意思 – Luca

3

使用此代码:

$test = $_POST['data']; 
2

您将在获取数据请求使用$_POST['data']

因为您发送它在data

因此,改变你这样的代码,

$test = $_POST['data']; 
+0

@unknown_dude。乐施会。所以它的工作? – Bhavin

+0

我介绍了你的修改 $ test = $ _POST ['data']; echo $ test; 我收到未定义的索引:第17行的C:\ xampp \ htdocs \ generator kart \ file.php中的数据,为什么? –

+0

使用'print_r($ _ POST);'你在数组中获得了什么? – Bhavin