美好的一天,我正在尝试在我的Web应用程序中使用Ajax。但我有一点问题。如果某个用户名已经注册,我会尝试控制表单。但我的JavaScript似乎没有向PHP发送$ _POST值。并且用户没有在$ _POST ['user']行上定义的响应。
这就是我所拥有的。
PHP:
<?php
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$dsn ='mysql:dbname=someone;host=127.0.0.1;charset=utf8';
$user='someone';
$pswd='aaa';
$dbh = new PDO($dsn, $user, $pswd, $opt);
$query="SELECT 1 FROM users WHERE username = :username";
$query_p=array(':username' => $_POST['user']);
try
{
$statment = $dbh->prepare($query);
$result = $statment->execute($query_p);
}catch(PDOException $e)
{
echo "Can't run query: " . $e->getMessage();
}
$row = $statment->fetch();
if($row){
return 0;
}else {
return 1;
}
?>
因此它打开了与数据库的连接并运行查询
JavaScript的:
function checkUser(e){
var state1 = document.getElementById("alert_text");
var u = document.getElementById("user").value;
if(u != ""){
state1.innerHTML = 'processing...';
var request = new XMLHttpRequest();
request.open("POST", "validation.php", true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var result=request.responseText;
alert(result);
if(result==1){
state1.innerHTML="OK";
}else{
state1.innerHTML="Alredy exists!";
}
}
};
request.send(u);
var slova = request.responseText;
}
}
document.getElementById("user").addEventListener("blur",checkUser,false );
技术上讲它是ajax。
HTML:
<form id="check" name="signUp" method="post">
<p class="alert_text"></p>
<label for="user">Username:</label><br />
<input id="user" name="user" type="text" ><br />
</form>
我真的不明白这是什么问题......
答案 0 :(得分:4)
您没有将用户名传递给PHP脚本。您的PHP正在寻找POST变量$_POST['user']
- 在您的JavaScript中发出GET请求,因此PHP脚本无需查找。
答案 1 :(得分:3)
基于编辑过的问题:您没有向服务器发送任何键值对,只是一个值。
您需要更改:
var u = document.getElementById("user").value;
为:
var u = 'user=' + encodeURIComponent(document.getElementById("user").value);
然后这对将被正确发送:
request.send(u); // sends a single key-value pair
请注意,我刚刚添加了encodeURIComponent
函数,以确保正确编码值。