javascript - AJAX 和 PHP 响应给出“SyntaxError:JSON 输入意外结束”
问题描述
我正在使用 AJAX 调用验证脚本。返回时$response
我不断收到错误消息SyntaxError: Unexpected end of JSON input
。如果我没有返回格式正确为 JSON 的数据,我不会感到惊讶,但现在我已经{ "loggedIn": false }
在 JSON 解析器中运行响应并且它似乎有效。我究竟做错了什么?
ajaxexample.php
<form method="post" name="login">
<input type="text" name="username" > Email/Username: <br>
<input type="password" name="password" > Password: <br>
<input type="submit">
</form>
<div id="content"></div>
</body>
</html>
<script>
$(document).on( 'submit', $("#login"), function(event){
event.preventDefault();
var formData = '{"login":[ {'+
'"username":"'+$('input[name="username"]').val()+'",'+
'"password":"'+$('input[name="password"]').val()+'"'+
'}]}';
var formData = JSON.parse(formData);
// Using the core $.ajax() method
$.ajax({
// The URL for the request
url: "users/validate.php",
// The data to send (will be converted to a query string)
data: formData,
// Whether this is a POST or GET request
type: "POST",
// The type of data we expect back
dataType : "json",
})
// Code to run if the request succeeds (is done);
// The response is passed to the function
.done(function( data ) {
$( "<div class=\"content\">").html( JSON.stringify(data) ).appendTo( "body" );
})
// Code to run if the request fails; the raw request and
// status codes are passed to the function
.fail(function( xhr, status, errorThrown ) {
alert( "Sorry, there was a problem!" );
console.log( "Error: " + errorThrown );
console.log( "Status: " + status );
console.dir( xhr.responseText );
})
// Code to run regardless of success or failure;
.always(function( xhr, status ) {
});
});
</script>
validate.php
<?php require_once '../users/init.php';?>
<?php
if(isset($_POST))
{
$username = $_POST['username'];
$password = $_POST['password'];
$validate = new Validate();
$validation = $validate->check($_POST, array(
'username' => array('display' => 'Username','required' => true),
'password' => array('display' => 'Password', 'required' => true)));
if ($validation->passed())
{
$user = new User();
$login = $user->loginEmail($username, $password, $remember);
$response = array('loggedIn'=>$login);
echo json_encode($response, JSON_PRETTY_PRINT );
}
}
else
{
echo json_encode("No data.");
}
?>
解决方案
我在那里看到了几个问题
首先,您发送的数据格式错误,并且当您可以首先创建对象时,创建一个 json 字符串然后将其解析为对象是不必要的。
var formData = {
"username": $('input[name="username"]').val(),
"password": $('input[name="password"]').val()
};
其次,由于您的数据格式$validation->passed()
错误,因此您将不会在请求中返回任何数据,该请求需要 json 并且会在没有得到任何数据时给出您看到的错误。
if ($validation->passed())
{
$user = new User();
$login = $user->loginEmail($username, $password, $remember);
$response = array('loggedIn'=>$login);
echo json_encode($response, JSON_PRETTY_PRINT );
}
else{
echo json_encode(array('loggedIn'=>false), JSON_PRETTY_PRINT );
}
此外,您的表单提交处理程序的选择器是错误的,它应该类似于
$(document).on( 'submit', "[name=login]", function(event){
推荐阅读
- r - R:x[[1]] 中的错误:下标越界(导入文件)
- c - 在函数中分配和初始化静态变量有什么不同的效果?
- java - 如何将语法荧光笔添加到使用 android 中的博主 api 获取的代码中?
- c# - 如何使用 Identity 从.Net 核心应用程序向 EventGrid 发送数据?
- java - Regex pattern matching is getting timed out
- powershell - Powershell:如何将布尔值传递给函数参数?
- python - 在 heroku 中找不到满足 aptural==0.5.2 要求的版本
- bash - 具有多个条件的 Bash 检查
- java - 为什么我收到“找不到appletviewer”错误?
- python - 如果在特定范围内匹配,Python 返回特定字母