PHP、MySQL、jQuery、AJAX:json数据返回正确响应,但前端返回错误
我有一张用户登记表。我正在通过AJAX动态地进行服务器端验证。我的问题的快速总结是,在验证两个字段时,第二个字段验证出现错误。如果我对第一个字段进行注释,则第二个字段不会显示任何错误。它有这种奇怪的行为。详情如下: HTML、JS和Php代码如下: HTML表单:PHP、MySQL、jQuery、AJAX:json数据返回正确响应,但前端返回错误,php,mysql,json,jquery,Php,Mysql,Json,Jquery,我有一张用户登记表。我正在通过AJAX动态地进行服务器端验证。我的问题的快速总结是,在验证两个字段时,第二个字段验证出现错误。如果我对第一个字段进行注释,则第二个字段不会显示任何错误。它有这种奇怪的行为。详情如下: HTML、JS和Php代码如下: HTML表单: <form id="SignupForm" action=""> <fieldset> <legend>Free Signup</legend>
<form id="SignupForm" action="">
<fieldset>
<legend>Free Signup</legend>
<label for="username">Username</label>
<input name="username" type="text" id="username" /><span id="status_username"></span>
<br />
<label for="email">Email</label>
<input name="email" type="text" id="email" /><span id="status_email"></span>
<br />
<label for="confirm_email">Confirm Email</label>
<input name="confirm_email" type="text" id="confirm_email" /><span id="status_confirm_email"></span>
<br />
</fieldset>
<p>
<input id="sbt" type="button" value="Submit form" />
</p>
</form>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#email").blur(function() {
var email = $("#email").val();
var msgbox2 = $("#status_email");
if (email.length > 3) {
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: "email=" + email,
dataType: 'json',
cache: false,
success: function(data) {
if (data.success == 'y') {
alert('Available');
} else {
alert('Not Available');
}
}
});
}
return false;
});
$("#confirm_email").blur(function() {
var confirm_email = $("#confirm_email").val();
var email = $("#email").val();
var msgbox3 = $("#status_confirm_email");
if (confirm_email.length > 3) {
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: 'confirm_email=' + confirm_email + '&email=' + email,
dataType: 'json',
cache: false,
success: function(data) {
if (data.success == 'y') {
alert('Available');
} else {
alert('Not Available');
}
},
error: function(data) {
alert('Some error');
}
});
}
return false;
});
});
</script>
<?php //check_ajax2.php
if(isset($_POST['email']))
{
$email = $_POST['email'];
$res = mysql_query("SELECT uid FROM members WHERE email = '$email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
$success = 'y';
$msg_email = 'Email available';
}
else
{
$success = 'n';
$msg_email = 'Email is already in use.</font>';
}
print json_encode(array('success' => $success, 'msg_email' => $msg_email));
}
if(isset($_POST['confirm_email']))
{
$confirm_email = $_POST['confirm_email'];
$email = ( isset($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : '' );
$res = mysql_query("SELECT uid FROM members WHERE email = '$confirm_email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
if( isset($email) && isset($confirm_email) && $email == $confirm_email )
{
$success = 'y';
$msg_confirm_email = 'Email available and match';
}
else
{
$success = 'n';
$msg_confirm_email = 'Email and Confirm Email do NOT match.';
}
}
else
{
$success = 'n';
$msg_confirm_email = 'Email already exists.';
}
print json_encode(array('success' => $success, 'msg_confirm_email' => $msg_confirm_email));
}
?>
免费注册
用户名
电子邮件
确认电子邮件
JS:
<form id="SignupForm" action="">
<fieldset>
<legend>Free Signup</legend>
<label for="username">Username</label>
<input name="username" type="text" id="username" /><span id="status_username"></span>
<br />
<label for="email">Email</label>
<input name="email" type="text" id="email" /><span id="status_email"></span>
<br />
<label for="confirm_email">Confirm Email</label>
<input name="confirm_email" type="text" id="confirm_email" /><span id="status_confirm_email"></span>
<br />
</fieldset>
<p>
<input id="sbt" type="button" value="Submit form" />
</p>
</form>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#email").blur(function() {
var email = $("#email").val();
var msgbox2 = $("#status_email");
if (email.length > 3) {
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: "email=" + email,
dataType: 'json',
cache: false,
success: function(data) {
if (data.success == 'y') {
alert('Available');
} else {
alert('Not Available');
}
}
});
}
return false;
});
$("#confirm_email").blur(function() {
var confirm_email = $("#confirm_email").val();
var email = $("#email").val();
var msgbox3 = $("#status_confirm_email");
if (confirm_email.length > 3) {
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: 'confirm_email=' + confirm_email + '&email=' + email,
dataType: 'json',
cache: false,
success: function(data) {
if (data.success == 'y') {
alert('Available');
} else {
alert('Not Available');
}
},
error: function(data) {
alert('Some error');
}
});
}
return false;
});
});
</script>
<?php //check_ajax2.php
if(isset($_POST['email']))
{
$email = $_POST['email'];
$res = mysql_query("SELECT uid FROM members WHERE email = '$email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
$success = 'y';
$msg_email = 'Email available';
}
else
{
$success = 'n';
$msg_email = 'Email is already in use.</font>';
}
print json_encode(array('success' => $success, 'msg_email' => $msg_email));
}
if(isset($_POST['confirm_email']))
{
$confirm_email = $_POST['confirm_email'];
$email = ( isset($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : '' );
$res = mysql_query("SELECT uid FROM members WHERE email = '$confirm_email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
if( isset($email) && isset($confirm_email) && $email == $confirm_email )
{
$success = 'y';
$msg_confirm_email = 'Email available and match';
}
else
{
$success = 'n';
$msg_confirm_email = 'Email and Confirm Email do NOT match.';
}
}
else
{
$success = 'n';
$msg_confirm_email = 'Email already exists.';
}
print json_encode(array('success' => $success, 'msg_confirm_email' => $msg_confirm_email));
}
?>
$(文档).ready(函数(){
$(“#email”).blur(函数(){
var email=$(“#email”).val();
var msgbox2=$(“状态电子邮件”);
如果(email.length>3){
$.ajax({
键入:“POST”,
url:“check_ajax2.php”,
数据:“email=”+email,
数据类型:“json”,
cache:false,
成功:功能(数据){
如果(data.success=='y'){
警报(“可用”);
}否则{
警报(“不可用”);
}
}
});
}
返回false;
});
$(“#确认电子邮件”).blur(函数(){
var confirm_email=$(“#confirm_email”).val();
var email=$(“#email”).val();
var msgbox3=$(“状态确认电子邮件”);
如果(确认电子邮件长度>3){
$.ajax({
键入:“POST”,
url:“check_ajax2.php”,
数据:“确认电子邮件=”+确认电子邮件+”&电子邮件=“+电子邮件,
数据类型:“json”,
cache:false,
成功:功能(数据){
如果(data.success=='y'){
警报(“可用”);
}否则{
警报(“不可用”);
}
},
错误:函数(数据){
警报(“某些错误”);
}
});
}
返回false;
});
});
PHP代码:
<form id="SignupForm" action="">
<fieldset>
<legend>Free Signup</legend>
<label for="username">Username</label>
<input name="username" type="text" id="username" /><span id="status_username"></span>
<br />
<label for="email">Email</label>
<input name="email" type="text" id="email" /><span id="status_email"></span>
<br />
<label for="confirm_email">Confirm Email</label>
<input name="confirm_email" type="text" id="confirm_email" /><span id="status_confirm_email"></span>
<br />
</fieldset>
<p>
<input id="sbt" type="button" value="Submit form" />
</p>
</form>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#email").blur(function() {
var email = $("#email").val();
var msgbox2 = $("#status_email");
if (email.length > 3) {
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: "email=" + email,
dataType: 'json',
cache: false,
success: function(data) {
if (data.success == 'y') {
alert('Available');
} else {
alert('Not Available');
}
}
});
}
return false;
});
$("#confirm_email").blur(function() {
var confirm_email = $("#confirm_email").val();
var email = $("#email").val();
var msgbox3 = $("#status_confirm_email");
if (confirm_email.length > 3) {
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: 'confirm_email=' + confirm_email + '&email=' + email,
dataType: 'json',
cache: false,
success: function(data) {
if (data.success == 'y') {
alert('Available');
} else {
alert('Not Available');
}
},
error: function(data) {
alert('Some error');
}
});
}
return false;
});
});
</script>
<?php //check_ajax2.php
if(isset($_POST['email']))
{
$email = $_POST['email'];
$res = mysql_query("SELECT uid FROM members WHERE email = '$email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
$success = 'y';
$msg_email = 'Email available';
}
else
{
$success = 'n';
$msg_email = 'Email is already in use.</font>';
}
print json_encode(array('success' => $success, 'msg_email' => $msg_email));
}
if(isset($_POST['confirm_email']))
{
$confirm_email = $_POST['confirm_email'];
$email = ( isset($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : '' );
$res = mysql_query("SELECT uid FROM members WHERE email = '$confirm_email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
if( isset($email) && isset($confirm_email) && $email == $confirm_email )
{
$success = 'y';
$msg_confirm_email = 'Email available and match';
}
else
{
$success = 'n';
$msg_confirm_email = 'Email and Confirm Email do NOT match.';
}
}
else
{
$success = 'n';
$msg_confirm_email = 'Email already exists.';
}
print json_encode(array('success' => $success, 'msg_confirm_email' => $msg_confirm_email));
}
?>
如果HTTP状态代码指示错误以及响应解析失败,则调用错误处理程序
我认为您的错误处理程序在收到响应2时被调用,因为{“success”:“y”,“msg_email”:“email available”}{“success”:“n”,“msg_confirm_email”:“email和confirm email不匹配”。}
不是有效的JSON。您可以在以下位置使用验证程序:
在PHP中,您可以在顶部定义$response\u对象
数组,并在底部打印json\u encode($response\u对象)
:
<?php //check_ajax2.php
$response_object = array('success' => 'y');
if(isset($_POST['email']))
{
$email = $_POST['email'];
$res = mysql_query("SELECT uid FROM members WHERE email = '" . mysql_real_escape_string($email) . "' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
$msg_email = 'Email available';
}
else
{
$response_object['success'] = 'n';
$msg_email = 'Email is already in use.';
}
$response_object['msg_email'] = $msg_email;
}
if(isset($_POST['confirm_email']))
{
$confirm_email = $_POST['confirm_email'];
$email = ( isset($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : '' );
$res = mysql_query("SELECT uid FROM members WHERE email = '" . mysql_real_escape_string($confirm_email) . "' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
if( isset($email) && isset($confirm_email) && $email == $confirm_email )
{
$msg_confirm_email = 'Email available and match';
}
else
{
$response_object['success'] = 'n';
$msg_confirm_email = 'Email and Confirm Email do NOT match.';
}
}
else
{
$response_object['success'] = 'n';
$msg_confirm_email = 'Email already exists.';
}
$response_object['msg_confirm_email'] = $msg_confirm_email;
}
print json_encode($response_object);
+1。非常感谢你的解决方案,丹尼尔。它就像一个符咒。我还尝试了您为验证json响应而提供的链接,但当我点击validate按钮时,它会在解析失败时提供结果。我给它一个输入{“成功”:“y”,“msg_email”:“email available”}{“成功”:“n”,“msg_confirm_email”:“email和confirm email不匹配”。}。我做的对吗?对不起,我对你给我的链接完全是个新手,因此我提出了这个问题。我很高兴它成功了!是的,你做得对。它表示“解析失败”,因为字符串{“success”:“y”,“msg_email”:“email available”}{“success”:“n”,“msg_confirm_email”:“email和confirm email不匹配”。}
不是有效的JSON。基本上,如果jsonlint网站说“解析失败”,那么您知道jQuery将调用您的错误处理程序。非常感谢您花时间解释它。谢谢。另外,我想知道您是否知道我可以使用哪些方法来缩短各个字段的php错误检查代码?我的意思是,目前对于我需要验证的每个字段,我必须在JS和PHP处理中添加相应的代码。那么,有没有什么方法可以让JS(首选)和PHP中的代码保持简单,从而不用分别为它们编写代码就可以验证这些代码?如果有,请告诉我。键入单个代码和错误检查已经太麻烦了!对PHP框架可以帮助您减少必须编写的验证代码量。我建议您花点时间学习一些PHP框架:当您的网站是高度数据库驱动的(CRUD:Create、Read、Update和Delete)时使用CakePHP,以及使用CodeIgniter获得全面的好框架。学习和设置它们需要一些时间,但是框架的好处是值得投入时间的,即使您只使用了其中的一些特性。例如,您好,丹尼尔,非常感谢您的链接。PHP验证在某种程度上是可管理的,而我试图真正理清的是JS验证。是否有任何可能引用JS验证代码的链接可用?