2014-09-22 78 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請求都是必需的。