未捕获的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的意图的任何线索。
您可以按时间顺序执行所有阶段:
-
从Web服务器报告数据类型。 如果您碰巧使用Apache:
ForceType application/json -
从PHP报告数据类型:
header('Content-Type: application/json');
-
告诉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.