数据没有通过JQuery Ajax (JSON)处理到php表单处理器


Data not being handled to php form processor through JQuery Ajax (JSON)

我正在为我的网站建立一个用户注册表单。我有所有的php注册过程没有使用Json通过Jquery AJAX正确。当我将其指定为数据类型时(因此我可以获得更多的"受教育"响应),php文件甚至不读取发送的数据,并且返回的是.error响应中的[object object]。我已经搜索了互联网,所以为了尝试找到一个解决方案,但没有帮助。我想这可能是我犯的一个错误,但我找不到。希望你能帮助我,提前谢谢。

请不要介意英文错误——我必须写得快。不要介意外国人的评论或标题。)

形式:(HTML)

<form action="">
        <label for="username">Username</label>
            <input type="text" name="username" id='username'>
            <label class='error' for="username" id="userEx">O nome de usuário já existe.</label>
            <label class='error' for="username" id="userDuv">Preencha esse campo, você o utilizará para fazer o Login no sistema.</label><br/>
        <label for="password">Password</label>
            <input type="password" name="password" id="senha">
            <label class='error' for="password" id="passDuv">Preencha esse campo.</label><br/>
        <label for="repassword">Repeat Password</label>
            <input type="password" name="repassword" id="reSenha">
            <label class='error' for="repassword" id="repassDuv">Preencha esse campo, ele é necessário para não registrar sua senha de forma errada.</label>
            <label class='error' for="repassword" id="passErr">As duas senhas devem ser iguais.</label><br/>
        <label for="nome">Name</label>
            <input type="text" name="nome" id='nome'>
            <label class='error' for="nome" id="nomeDuv">Preencha esse campo, ele será útil na sua identificação no site.</label><br/>

        <label for="email">E-mail:</label>
            <input type="email" name="email" id='email'>
            <label class='error' for="email" id="emailDuv">Preencha esse campo com um e-mail válido, ele será utilizado para recuperar sua senha caso necessário.</label><br/>

        <label for="codreg">Code:</label>
            <input type="text" name="codreg" id='codReg'>
            <label class='error' for="codreg" id="codeDuv">Preencha esse campo, para verificar a autenticidade de sua visita.</label>
            <label class='error' for="codreg" id="codeInv">Código Inválido.</label><br/>

            <input type='button' value='Enviar' name='enviar' id='regSub'>
            <input type='reset' name='limpar' value='Limpar' onclick="limpar()">
    </form>
    </div>
    <div class="registroProcesso">
        <p>Success!</p>
        <img class="processoImg" src="" alt="Ok!">
    </div>

JS脚本:

 //Form Handler
    $('#regSub').click(function() {
        var username = $('input#username').val();
        if (username == '') {
            $('label#userDuv').show();
            $('input#username').focus();
            return false;
        }
        var pass = $('input#senha').val();
        if (pass == '') {
            $('label#passDuv').show();
            $('input#senha').focus();
            return false;
        }
        var repass = $('input#reSenha').val();
        if (repass == '') {
            $('label#repassDuv').show();
            $('input#reSenha').focus();
            return false;
        }
        if (pass != repass) {
            $('label#passErr').show();
            $('input#senha').focus();
            return false;
        }
        ;
        var nome = $('input#nome').val();
        if (nome == '') {
            $('label#nomeDuv').show();
            $('input#nome').focus();
            return false;
        }
        var email = $('input#email').val();
        if (email == '') {
            $('label#emailDuv').show();
            $('input#email').focus();
            return false;
        }
        var codReg = $('input#codReg').val();
        if (codReg == '') {
            $('label#codeDuv').show();
            $('input#codReg').focus();
            return false;
        }
        ;
        //var dataString = 'username=' + username + '&password=' + pass + '&nome=' + nome + '&email=' + email + '&codreg=' + codReg;
        //alert(dataString); return false;
        var formData = {
            'username': username,
            'password': pass,
            'nome': nome,
            'email': email,
            'codreg': codReg
        };
        $.ajax({
            type: 'POST',
            url: 'checkregistration.php',
            dataType: 'json',
            data: formData,
            encode: true
        }).done(function(data) {
            if (!data.sucess) {
                if (data.errors.username) {
                    $('label#userEx').show();
                    $('input#username').focus();
                };
                if (data.errors.codigo) {
                    $('label#codInv').show();
                    $('input#codReg').focus();
                };
            } else {
                $('.registroProcesso').show();
                setTimeout(function() {
                    document.location.href = '../principal.html';
                }, 10000);
            };
        }).error(function(data) {
            alert(data);
        });
    });
PHP脚本

    <!DOCTYPE html>
<html lang="pt-BR">
    <head>
        <title>Reghandler</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="styles.css">
    </head>
    <body>
        <?php
        ob_start();
        // Valor nulo para as variaveis antes de iniciar
        $username = $password = $nome = $email = $codreg = "";
        $host = "localhost"; // Nome do Host
        $dbuser = "root"; // Mysql username 
        $dbpass = ""; // Mysql password 
        $db_name = "usuarios"; // Database name 
        $tbl_name = "usuarios"; // Table name
        $code_tbl = 'codigos';
        $returnData = array();
        $errors = array();
        $recieved = null;
        mysql_connect("$host", "$dbuser", "$dbpass")or die("cannot connect");
        mysql_select_db("$db_name")or die("cannot select DB");
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $recieved = json_decode($_POST, true);
        }
        if ($recieved != null) {
            $username = test_input($recieved["username"]);
            $password = test_input($recieved["password"]);
            $nome = test_input($recieved["nome"]);
            $email = test_input($recieved["email"]);
            $codreg = test_input($recieved["codreg"]);
        }
        function test_input($data) {
            $data = trim($data);
            $data = stripslashes($data);
            $data = htmlspecialchars($data);
            $data = mysql_real_escape_string($data);
            return $data;
        }
        $sql = "SELECT * FROM $tbl_name WHERE username='$username'";
        $result = mysql_query($sql);
        if (mysql_num_rows($result) != 0) {
            $errors['username'] = 'Nome de usuário já existente.';
        }
        $sqlcode = "SELECT * FROM $code_tbl WHERE codigo='$codreg'";
        $resultcode = mysql_query($sqlcode);
        if (mysql_num_rows($resultcode) == 0) {
            $errors['codigo'] = 'Código de registro não encontrado.';
        }
        if (!empty($errors)) {
            $returnData['success'] = false;
            $returnData['errors'] = $errors;
        } else {
            $returnData['success'] = true;
            $insert = "INSERT INTO $tbl_name (username, senha, nome, email)
            VALUES ('$username', '$password','$nome','$email')";
        }
        echo json_encode($returnData);
        ob_end_clean();
        ?>
    </body>
</html>

尝试将数据类型从json更改为json

问题是你正在发送很多东西回来,而不是有效的json。你需要删除所有的html,并确保你只发送json,而不是其他的。因此,没有html,没有警告,没有回显等,最后只有一个json_encode()

当jQuery遇到大量无法转换为对象的文本,并且您指定数据是有效的json时,它会自动转到错误处理程序

您可以这样编辑以下部分:

var formData = {
            'username': username,
            'password': pass,
            'nome': nome,
            'email': email,
            'codreg': codReg
        };

        $.ajax({
            type: 'POST',
            url: 'checkregistration.php?callback=',
            dataType: 'json',
            data: data:JSON.stringify([formData])},
            encode: true
        }).done....etc

在php页面中你可以返回一些值,比如

echo $_GET['callback'] . $jsonData

其中$jsonData是JSON类型的变量

和尝试。

下面的博客将帮助你:

HTML-PHP Webservice

这个错误很简单,很愚蠢。我忘记查询了:

if (!empty($errors)) {
            $returnData['success'] = false;
            $returnData['errors'] = $errors;
        } else {
            $returnData['success'] = true;
            $insert = "INSERT INTO $tbl_name (username, senha, nome, email)
            VALUES ('$username', '$password','$nome','$email')";

当我插入mysql_query($insert) $insert后,它开始轻轻地工作。唯一的问题仍然是如何处理从php发送回来的数据。