[英]Jquery Ajax error handling fail
我正在尝试处理从php脚本发送的错误。 这是我的代码:
<script>
$(document).ready(function() {
$('#signUpForm').submit(function() {
$.ajax({
type: 'POST',
url: "process.php",
data: $("#signUpForm").serialize(),
success: function(data) {
if ((data == "Incorect email format.") || (data == "Username must be between 6-32 signs and only include 0-9, A-Z characters.") || (data == "Password must be between 8-32 signs and only include 0-9, A-Z characters.") || (data == "Passwords do not match.") || (data == "Username is taken, please try another one.")) {
$('#errors').show();
$('#errors').html(data);
} else {
window.location.href = "http://localhost:8888";
}
}
});
return false;
});
});
</script>
Firebug显示已发送响应,但未显示错误。 哪里可能有问题? 谢谢。
对于这样的代码,我想说最可能的原因是字符串是一个字符或两个字符。 尝试将console.log(data)
放在if
语句之前,以查看要比较的内容。
我建议您以略有不同的格式返回错误,这样可以更轻松地避免此类问题。 例如,如果您让服务器返回一些JSON,例如:
{
"status": 1,
"errorMessage": "Incorrect email format."
}
那么您只需测试非零状态代码,而不必确保整个字符串正确无误。
因此,根据我们在注释中的讨论,并且您已从服务器以JSON格式发送回了新响应,以下是如何呈现这些错误的方法:
假设您的响应如下(总是像这样在站点上验证JSON响应):
[{"status":"1","data":"Incorrect email format."},{"status":"2","data":"Username must be min 6 signs and only include 0-9, A-Z characters."},{"status":"3","data":"Password must be min 8 signs and only include 0-9, A-Z characters."}]
现在,如果您在成功函数中得到此响应,则可以在HTML上呈现它们:
success: function (data) {
if (data) {
$.each(data, function (index, obj) {
$('#error').append('<div>' + obj.data + '</div>');
});
}
}
这是一个jsfiddle展示了它的作用
您可以使用警报(数据)来显示您确切地获得了哪些数据,并查看您是否输入了错字,或者使用Jemery的建议,使用json! 这比比较所有字符串要容易得多。
一个例子:
$('#signUpForm').submit(function() {
$.ajax({
type: 'POST',
url: "process.php",
data: $("#signUpForm").serialize(),
dataType: 'json',
success: function (errorstatus) {
if (errorstatus.status >= 1) {
$('#errors').html(errorstatus.data);
}
else {
window.location.href = "http://localhost:8888";
}
}
});
}
在PHP中只需执行以下操作:
$errorstatus = array(
'status' => $status,
'data' => $data
);
echo json_encode($errorstatus);
正如@RaphaelDDL所说,请尝试console.log(data)来查看PHP脚本中的内容。 但是,如果您能够编辑process.php,建议您返回错误代码并将消息存储在js代码中,而不要返回整个字符串。 我的意思是:
success: function(data) {
if (data) {
var error = "";
switch (data) {
case 1 : error = "Custom error msg 1"; break;
case 2 : error = "Custom error msg 2"; break;
case 3 : error = "Custom error msg 3"; break;
...
}
$('#errors').show();
$('#errors').html(error);
} else {
...
}
}
和你的PHP脚本:
$error_code = 0;
...
if ($some_value !== $valid_value) {
$error_code = 1;
}
...
die($error_code);
使用die()
进行此操作是确保不向js脚本发送任何其他字符的唯一方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.