未捕获的SyntaxError:位于0 {J}的JSON中的意外标记

时间:2017-03-15 03:06:49

标签: javascript php jquery json ajax

在一些帮助下,我设法创建一个表单,在将用户添加到数据库之前验证并确认用户密码。我遇到了一些问题,因为没有发送用户的数据并给我以下错误:

  

未捕获的SyntaxError:位于0的JSON中的意外标记,位于JSON.parse()上,位于Object.success(confirm3.php:29)
  at i(jquery.min.js:2)
在A(jquery.min.js:4)
在   XMLHttpRequest的。 (jquery.min.js:4)

错误

  

at Object.success(confirm3.php:29)

指的是以下这一行

var data = JSON && JSON.parse(response) || $.parseJSON(response);

POST变量

$UserNm=$_POST["UserNm"];
$UserId=$_POST["UserId"];
$UserPwd=$_POST["UserPwd"];

为清楚起见,应返回的数据是$ReturnMessage,它是从存储过程中检索的。 $ReturnMessage将显示成功和失败操作的操作状态。

$ReturnMessage的一个例子:

  

"用户ID存在。 (011代码)。"
  "用户ID MINT20已添加。"

使用POST方法:if(isset($_POST['Submit'])) {

$ ReturnMessage:

 if(isset($ReturnStatus) && $ReturnStatus==1) {
 $ReturnMessage=odbc_result($stmt,'ReturnMessage');
 }
 }

 $ReturnMessage = utf8_encode ($ReturnMessage);
 echo json_encode($ReturnMessage);
 }

脚本:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script type="text/javascript">
$(function() {
  $("#myForm").on("submit", function(e) {
    e.preventDefault(); 
    var password = $("#UserPwd").val();
    var confirmPassword = $("#ConfirmPassword").val();
    console.log(password,confirmPassword)  
    if ($.trim(password) === password && 
      password !== "" && 
      password === confirmPassword) { 
      $.ajax({
        url: "confirm3.php",
        method: "POST",
        data: { Submit: "true" },
        success: function(response) {
          var data = JSON && JSON.parse(response) || $.parseJSON(response);
          alert(data);
        }
        });
        } else {
          alert("Please Enter Password Correctly");
        }
      });
});
<script>

我有点迷惑。请指导我。谢谢。

3 个答案:

答案 0 :(得分:1)

首先,jQuery可以自动为您解码JSON(它会尽力猜测)。尝试手动执行只会使您的代码更加冗长且容易出错。但是,你没有给它任何暗示。您共享的代码中没有任何内容可以提供有关您使用jQuery的意图的任何线索。

您可以按时间顺序执行的所有阶段:

  1. 从Web服务器报告数据类型。如果您碰巧使用Apache:

    <Files "confirm3.php">
        ForceType application/json
    </Files>
    
  2. 从PHP报告数据类型:

    header('Content-Type: application/json');
    
  3. 告诉jQuery你期望JSON:

    url: "confirm3.php",
    method: "POST",
    dataType: "json",
    data: { Submit: "true" },
    success: function(response) {
        console.log(data); // Already decoded (don't use alert to debug!)
    }
    
  4. 你当然可以省略几乎所有步骤,但不是全部。

    其次,如果您收到JSON解析错误,则首先需要检查的是响应是否为有效的JSON。最简单的方法是使用浏览器开发人员工具,更具体地说是the "Network" pane

答案 1 :(得分:0)

您是否在php中设置了内容类型?

header('Content-Type: application/json');

你也不需要把#34; true&#34;在引号中,当json进入你的php脚本时,一旦你运行json_decode,php会将它识别为布尔值。

答案 2 :(得分:0)

在我的情况下使用这个有一些空字节,所以我想出来并解决了我的问题。

var data3 = data.substring(data.lastIndexOf("{")+1,data.lastIndexOf("}"));
      count = $.parseJSON("{"+data3+"}");
      alert( count.firstname ); // firstname is the key so you can use anything to test it.