使用AJAX检查用户名可用性

时间:2015-07-05 17:32:04

标签: javascript php model-view-controller

我目前正在尝试用PHP开发一个小网站来测试我的技能。 然而,当我决定为注册过程实施实时用户名可用性检查时,我发现自己陷入困境,因为我的JavaScript知识有点基础。

现在,当我在用户名字段中输入一些名称时,我只获得加载图像而没有其他内容。这就是我所做的:

我的login.php页面存储在/ views文件夹中:

<section>
    <div>
        <form action="?action=login" method="post">
            <input type="text" placeholder="username" name="username" id="username" onkeypress ="check()">
            <span id="usernameStatus"></span>
        </form>
    </div>
</section>

我的js文件存储在/ views / js:

function check () {
    var status = document.getElementById('usernameStatus');
    var u = document.getElementById('username').value;
    if(u != ""){
        status.innerHTML = '<img src="views/img/wait.gif" alt="" height="20" />';
        var hr = new XMLHttpRequest();
        hr.open("POST", "../login.php", true);
        hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

        hr.onreadystatechange = function() {
            if(hr.readyState == 4 && hr.status == 200) {
                status.innerHTML = hr.responseText;
            }
        }

        var v = "checkName="+u;
        hr.send(v);

    }
}

最后将loginController.php存储在/ controllers:

    public function run() {
        if(!empty($_POST["checkName"])){
            $name= htmlentities($_POST["checkName"]);
            if(Db::getInstance()->username_ok($name)){
                echo ("<strong>" . $name . "</strong> unavailable");
            }
            else{
                echo ("<strong>" . $name . "</strong> available");
            }
        }
        require_once('views/login.php');
    }

有人可以解释一下我做错了什么吗?谢谢!

2 个答案:

答案 0 :(得分:0)

这里有一个tutorial可以帮助你,它是一个PHP和jquery的实时用户名检查器。

答案 1 :(得分:0)

我认为问题出在文件名上。

从你的问题来看,我猜文件结构是

root
|-- controllers
|   `-- loginController.php
`-- views
    `-- js
        `-- script.js

views/js/scriptname.js文件中的JavaScript代码中,

hr.open("POST", "../login.php", true);

请求将发送到文件login.php

但是,正如您所提到的,服务器端php脚本的路径是/controllers/loginController.php

根据我的说法,JavaScript代码应该如下:

hr.open("POST", "controllers/loginController.php", true);