无错误时自定义JSON错误响应失败 [英] Custom JSON error response fails when no error

查看:62
本文介绍了无错误时自定义JSON错误响应失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这对我来说是一个新领域.

我已经创建了自定义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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆