无法从javascript到php获取参数

无法从javascript到php获取参数,javascript,php,ajax,Javascript,Php,Ajax,无法获取从javascript传递到loginme.php的参数 <form method="POST"> <input type="text" id="userid" name="userid"></input> <input type="password" id="pass" name="pass"></input> <input type="butto

无法获取从javascript传递到loginme.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>
<?php

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

echo"$username and $password";

?>
这是一个简单的形式 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>
<?php

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

echo"$username and $password";

?>
loginme.php中的简单echo语句 loginme.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>
<?php

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

echo"$username and $password";

?>

您正在传递GET参数:

xmlhttp.open("POST","loginme.php?userid="+userid+"&pass="+pass,true);
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
。。。因此,您需要从
$\u GET
,而不是
$\u POST
,获取它们:

$username=$_GET['userid']; 
$password=$_GET['pass']; 
您可能希望使用该方法来发送数据。现在,您的有效负载为空:

xmlhttp.send();

如果需要,可以使用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:


您使用的是
POST
,但将值显式设置到查询字符串
GET
样式中。因此,基本上您发送的是一个空白的
POST

您需要发送如下值:

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

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请求都是必需的。

用户ID位于使用get获得的URL中。pass从未实际发送过。您似乎不想传递密码和更多信息。对于post,您应该在请求正文中传递数据,而不是作为查询字符串。代码已编辑。现在,密码也和用户id一起发送。它返回什么?如果这些星号真的在你的代码中,那将导致它失败。它成功了。但是如果我们在open()函数中使用POST方法,那么为什么在php中使用GET呢?
$\u GET
是包含GET参数的数组。它与请求协议无关。您可以根据同一请求发送get和post。URL本身中的任何内容都是get。