无错误时自定义JSON错误响应失败 [英] Custom JSON error response fails when no error
问题描述
这对我来说是一个新领域.
我已经创建了自定义JSON错误输出,以警告用户输入的名称和/或电子邮件是否已经存在.我正在尝试吐出错误,然后如果没有错误存在,请继续.不幸的是,我在Firefox控制台中收到以下消息:"Uncaught SyntaxError:JSON.parse:JSON数据的第2行第1列的JSON数据后出现意外的非空白字符."很奇怪,因为我设置了3个JSON错误变体,它们都起作用(1个名称,2个电子邮件,3个名称和电子邮件),但是只有当这些条件都没有满足时,它才会失败.
我在下面尽可能精简了代码.它已经过多次测试,除上述问题外,其他所有功能都可以正常工作.
HTML表单
< form method ='post'id ='part03'>< input type ='文本'id ='名称'占位符='输入您的名称'>< input type ='电子邮件'id ='电子邮件'占位符='输入您的电子邮件'>< input type ='button'id ='submit'></form>
PHP
<?phpheader('Content-type:application/json');//获取名称&检查是否存在$ name = mysqli_real_escape_string($ con_usr_pub,$ _POST ['name']);$ check_name = mysqli_query($ con,"从表中选择名称,其中name ='$ name'");如果(mysqli_num_rows($ check_name)> 0){$ name_error = true;}别的{$ name_error = false;}//获取电子邮件和检查是否存在$ email = mysqli_real_escape_string($ con_usr_pub,$ _POST ['email']);$ check_email = mysqli_query($ con,从表中选择电子邮件,其中email ='$ email'");如果(mysqli_num_rows($ check_name)> 0){$ name_error = true;}别的{$ name_error = false;}//JSON名称错误如果($ name_error == true&& $ email_error == false){$ response =对不起,您输入的名称已在使用中."}//JSON电子邮件错误如果($ name_error ==否&& $ email_error ==真){$ response =对不起,您输入的电子邮件已经在使用中.}//JSON名称&电子邮件错误如果($ name_error == true&& $ email_error == true){$ response =对不起,您输入的姓名和电子邮件已经被使用."}//JSON没有错误如果($ name_error ==否&& $ email_error ==否){$ response =继续";}回声json_encode($ response);?>
JS
//AJAX-名称&电子邮件$(document).on('click','#submit',function(){var name = $(#name").val();var email = $(#email").val();$ .ajax({网址:"myserverfile.php",方法:"POST",数据: {名称:名称,电子邮件:电子邮件},dataType:文本",成功:功能(响应){var json = $ .parseJSON(response);如果(json ==="continue"){警报(是");} 别的 {alert(json);}}});});
已使用:jQuery 3.4.1PHP 7.4
在查看jQuery文档并将我的变量名更改为"e"后,将其弄清楚.而不是"json".
正在使用JS
//AJAX-名称&电子邮件$(document).on('click','#submit',function(){var name = $(#name").val();var email = $(#email").val();$ .ajax({网址:"myserverfile.php",方法:"POST",数据:{name:name,email:email},dataType:文本",成功:功能(响应){var e = jQuery.parseJSON(response);如果(e ==继续"){//继续警报(是");} 别的 {警报(e);}}});});
注意:有一个小问题,它有点慢/无响应(双关语不是故意的)-我已通过在php中删除json数组来解决此问题,因为它不是必需的./p>
This is a new area for me.
I've created custom JSON error outputs to alert users if they enter a name and/or an email which already exists. I'm trying to spit out the errors and then if no error exists, continue. Unfortunately I'm getting the following message in Firefox console: "Uncaught SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 2 column 1 of the JSON data." It's weird as I have 3 JSON error variations set up which are working (1 name, 2 email,3 name & email) but only when none of those conditions are met does it fail.
I slimmed down the code as much as possible below. It has been tested multiple times, everything else is working except for the above issue.
THE HTML FORM
<form method='post' id='part03'>
<input type='text' id='name' placeholder='Enter your name'>
<input type='email' id='email' placeholder='Enter your email'>
<input type='button' id='submit'>
</form>
PHP
<?php
header('Content-type: application/json');
// Get name & check if exists
$name = mysqli_real_escape_string($con_usr_pub, $_POST['name']);
$check_name = mysqli_query($con, "select name from table where name='$name'");
if (mysqli_num_rows($check_name) > 0)
{
$name_error = true;
}
else
{
$name_error = false;
}
// Get email & check if exists
$email = mysqli_real_escape_string($con_usr_pub, $_POST['email']);
$check_email = mysqli_query($con, "select email from table where email='$email'");
if (mysqli_num_rows($check_name) > 0)
{
$name_error = true;
}
else
{
$name_error = false;
}
// JSON name error
if ($name_error == true && $email_error == false)
{
$response = "Sorry, the name you entered is already in use.";
}
// JSON email error
if ($name_error == false && $email_error == true)
{
$response = "Sorry, the email you entered is already in use.</p>";
}
// JSON name & email error
if ($name_error == true && $email_error == true)
{
$response = "Sorry, both the name and email you entered are already in use.";
}
// JSON no error
if ($name_error == false && $email_error == false)
{
$response = "continue";
}
echo json_encode($response);
?>
JS
// AJAX - Name & Email
$(document).on('click', '#submit', function() {
var name = $("#name").val();
var email = $("#email").val();
$.ajax({
url: "myserverfile.php",
method: "POST",
data: {
name: name,
email: email
},
dataType: "text",
success: function(response) {
var json = $.parseJSON(response);
if (json === "continue") {
alert("YES");
} else {
alert(json);
}
}
});
});
Used: jQuery 3.4.1 PHP 7.4
Figured it out after looking at jQuery documentation and altering my variable name to "e" instead of "json".
Working JS
// AJAX - Name & Email
$(document).on('click','#submit',function() {
var name=$("#name").val();
var email=$("#email").val();
$.ajax({
url:"myserverfile.php",
method:"POST",
data:{name:name,email:email},
dataType:"text",
success:function(response) {
var e = jQuery.parseJSON(response);
if (e == "continue") {
// Continue on
alert("YES");
} else {
alert(e);
}
}
});
});
Note: There was a slight issue with it being a bit slow/unresponsive (pun not intended) - I've fixed this by removing json array in php as it wasn't required.
这篇关于无错误时自定义JSON错误响应失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!