我正在为我的网站建立一个用户注册表单。我有所有的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发送回来的数据。