2014-09-22 75 views
0

无法获取从JavaScript传递给loginme.php参数无法从JavaScript获取参数到PHP

这是简单的形式 的index.php

<form method="POST"> 

      <input type="text" id="userid" name="userid"></input> 
      <input type="password" id="pass" name="pass"></input> 
      <input type="button" value="Log in" onclick="letUserLogin()"/> 
</form> 

JavaScript函数: myscript.js

function letUserLogin() { 
    var userid = document.getElementById("userid").value; 
    var pass = document.getElementById("pass").value; 

    if (window.XMLHttpRequest) { 

    xmlhttp=new XMLHttpRequest(); 
    } else { 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 

     alert(xmlhttp.responseText); //only shows 'and' 
    } 
    } 
    xmlhttp.open("POST","loginme.php?userid="+userid+"&pass="+pass,true); 
    xmlhttp.send(); 
} 
012在loginme.php loginme.php

简单的回声声明

<?php 

// username and password sent from form 
$username=$_POST['userid']; 
$password=$_POST['pass']; 

echo"$username and $password"; 

?> 
+3

userid在您使用GET获取的URL中。通过永远不会被发送。 – 2014-09-22 14:41:41

+1

你似乎不喜欢传递密码和更多的职位,你应该传递请求正文中的数据而不是查询字符串。编辑代码 – 2014-09-22 14:42:18

+0

。现在密码也随用户ID一起发送。 – 2014-09-22 14:44:54

回答

0

你传入GET参数:

xmlhttp.open("POST","loginme.php?userid="+userid+"&pass="+pass,true); 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

...因此你需要从$_GET获取它们,而不是$_POST

$username=$_GET['userid']; 
$password=$_GET['pass']; 

您可能想使用send()方法来发送您的数据。现在,你的有效载荷为空:

​​
+0

它工作。但如果我们在open()函数中使用POST方法,那么为什么在PHP中使用GET? – 2014-09-22 14:56:13

+1

'$ _GET'是包含get参数的数组。它与请求协议无关。您可以发送同一请求上的获取和发布。无论网址本身是什么,都可以得到。 – 2014-09-22 14:57:46

0

您可以使用jQuery解决这个,如果你想很容易: 这种方法也可以让你把表单的动作参数中的URL,并使用POST哪个更确保传送密码信息:

JQUERY:

$(document).on('submit', "form", function(e){ //We add a listener 
    e.preventDefault(); 
    $.post($(this).attr('action'), $(this).serialize()) 
    .done(function(data) { 
    //Do something with response   
}); 
}); 

请注意,您当然可以改变听众只听的具体形式。在这种情况下,所有表单提交将被捕获,而不是在页面中的特定提交。

HTML:

<form action="/path/to/loginme.php"> 
    <input type="text" name="userid"> 
    <input type="password" name="pass"> 
</form> 

PHP:

$username=$_POST['userid']; 
$password=$_POST['pass']; 
echo "$username and $password"; 
0

您正在使用POST但明确设定值到查询字符串,GET风格。所以基本上你会发一个空白的POST

您需要发送的值是这样的:

xmlhttp.open("POST","loginme.php", true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send("userid=" + userid + "&pass=" + pass); 
0

试试这个:

var userid =encodeURIComponent(document.getElementById("userid").value) 
var pass =encodeURIComponent(document.getElementById("pass").value) 
var parameters="userid="+userid+"&pass="+pass 
mypostrequest.open("POST", "loginme.php", true) 
mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
mypostrequest.send(parameters) 

使用encodeURIComponent()的参数值中编码任何特殊字符。 致电setRequestHeader()并将其内容类型设置为"application/x-www-form-urlencoded"。这对于通过Ajax进行的任何POST请求都是必需的。