Ajax 元素返回完整的 html 代码


Ajax Element return full html code

我无法弄清楚我的代码出了什么问题,但是如果我使用以下代码调用ajax:

阿贾克斯.js:

function ajaxObj(meth, url){
var x = new XMLHttpRequest();
x.open(meth, url, true);
x.setRequestHeader("Content-type", "application/x-www_form-urlencoded");
return x;
}
function ajaxReturn(x){
    if(x.readyState == 4 && x.status == 200){
    return true;
    }
}

注册.php

function checkusername(){
            var u = _("username").value;
            if( u != ""){
                _("usernamestatus").innerHTML = "checking...";
                var ajax = ajaxObj("POST", "signup.php");
                ajax.onreadystatechange = function(){
                    if(ajaxReturn(ajax) == true){
                        _("usernamestatus").innerHTML = ajax.responseText;
                    }
                }
                ajax.send("usernamecheck="+u);
            }
        }

我正在调用的PHP代码在注册中如下.php:

<?php
    //ajax calls usernamecheck
    if(isset($_POST["usernamecheck"])){
        include_once("php_includes/db_conx.php");
        $username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']);
        $sql = "SELECT id FROM users WHERE username = '$username' LIMIT 1";
        $query = mysqli_query($db_conx, $sql);
        $uname_check = mysqli_num_rows($query);
        if(strlen($username) < 3 || strlen($username) > 16) {
            echo '<strong style = "color:#F00;">3 - 16 characters please</strong>';
            exit();
        }
        if(is_numeric($username[0])){
            echo '<strong style = "color:#F00;">Username must begin with a letter!</strong>';
            exit();
        }
        if($uname_check < 1){
            echo '<strong style = "color:#09900;">' . $username . ' is OK</strong>';
            exit();
        } else {
            echo '<strong style = "color:#F00;">' . $username . ' is taken</strong>';
            exit();
        }
    }
?>

如您所见,这只是对注册表单中用户名的检查。

函数_(x)是按 ID 获取元素。

我得到完整的 HTML 代码作为响应,而不是回声。

如果我使用以下:

<?php
//ajax calls usernamecheck
if(isset($_POST["usernamecheck"])){
    echo 'test';
}

然后它返回测试 + 完整的 HTML。

我做错了什么?

您应该只在 AJAX 后端调用结束时使用一次exit(),以便脚本将终止,并且不会向浏览器发送任何其他内容。 例如,

<?php
if(isset($_POST["usernamecheck"])){
    echo 'test'; // or whatever complex logic should be here
    exit();
}

会做这个伎俩。

哦,上帝为什么有正确的答案。这正是"x-www_form-urlencoded"中的错别字,应该是"x-www-form-urlencoded"。