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

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

未捕获的SyntaxError:位于0的JSON中的意外标记
在JSON.parse()
at 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将显示成功和失败操作的操作状态。

$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); } 

脚本:

   $(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"); } }); });  

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

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

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

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

      ForceType application/json  
  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!) } 

你当然可以省略几乎所有步骤,但不是全部。

其次,如果你得到一个JSON解析错误,你首先需要检查的是响应是否是有效的JSON。 最简单的方法是使用浏览器开发人员工具,更具体地说是“网络”窗格 。

你有没有在你的PHP中设置你的内容类型?

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

你也不需要在引号中加上“true”,当json进入你的php脚本时,一旦你运行json_decode,php会将它识别为布尔值。

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

 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.