阿贾克斯。将数据发送到php文件

时间:2016-01-26 12:39:05

标签: javascript php ajax

美好的一天,我正在尝试在我的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>

我真的不明白这是什么问题......

2 个答案:

答案 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函数,以确保正确编码值。