在一些帮助下,我设法创建一个表单,在将用户添加到数据库之前验证并确认用户密码。我遇到了一些问题,因为没有发送用户的数据并给我以下错误:
未捕获的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>
我有点迷惑。请指导我。谢谢。
答案 0 :(得分:1)
首先,jQuery可以自动为您解码JSON(它会尽力猜测)。尝试手动执行只会使您的代码更加冗长且容易出错。但是,你没有给它任何暗示。您共享的代码中没有任何内容可以提供有关您使用jQuery的意图的任何线索。
您可以按时间顺序执行的所有阶段:
从Web服务器报告数据类型。如果您碰巧使用Apache:
<Files "confirm3.php">
ForceType application/json
</Files>
从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。最简单的方法是使用浏览器开发人员工具,更具体地说是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.