语法错误:JSON 输入解析器错误意外结束

问题描述 投票:0回答:1

无论我改变什么,我所能做的就是获取console.log(data);并让它返回一个空白空间。

它只打印出下面发布的错误。

 $.ajax({
    type: 'POST',
    url: 'ajax/register.php',
    data: dataObj,
    dataType: 'json',
    async: true,
   }).done(function ajDone(data) {
        console.log(data);
    
        if(data.redirect !== undefined){

        } else if(data.error !== undefined){
            error.css("display", "block")
        errormsg.text("This username already exists.")
        }
   }).fail(function ajFailed(a,o,e){
   
    console.log(a)
    console.log(o)
    console.log(e)
   }).always(function alwaysRun(data){
        console.log("Always")
   })

控制台输出是

parsererror

SyntaxError: Unexpected end of JSON input
    at parse (<anonymous>)
    at jquery.min.js:2:77288
    at l (jquery.min.js:2:77405)
    at XMLHttpRequest.<anonymous> (jquery.min.js:2:80204)

在这里抛出对象声明只是为了确保您不会认为对象被错误定义:

var dataObj = {
    username: $("input[name='username']", form).val(),
    password: $("input[type='password']", form).val()
};

我的 ajax/register.php 看起来像这样:

<?php 
define('__CONFIG__', true);
require_once "../mfiles/config.php";


if($_SERVER['REQUEST_METHOD'] == 'POST') {

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

    $return = [];
    $username = $_POST['username'];
    $findUser = $con->prepare("SELECT user_id FROM users WHERE username = LOWER(:username) LIMIT 1");
    $findUser->bindParam(":username", $username, PDO::PARAM_STR);
    $findUser->execute();
    
    if($findUser->rowCount() == 1){



    } else {

    }
    $return['redirect'] = "/dashboard.php";
} else {

    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    $addUser = $con->prepare("INSERT INTO users(username, password, coins) VALUES(LOWER(:username),:password,:coins)");
    $addUser = bindParam(":username", $username, PDO::PARAM_STR);
    $addUser = bindParam(":password", $password, PDO::PARAM_STR);
    $addUser = bindParam(":coins", 400, PDO::PARAM_INT);
    $addUser->execute();
    $user_id = $con->lastInsertId();
    $_SESSION['user_id'] = (int) $user_id;

    $return['redirect'] = "/dashboard.php?message=welcome";
}

?>

如果我手动访问该页面,我会得到以下信息:

Warning: Undefined array key "password" in C:\xampp\htdocs\web\ajax\register.php on line 26

Fatal error: Uncaught Error: Call to undefined function bindParam() in C:\xampp\htdocs\web\ajax\register.php:28 Stack trace: #0 {main} thrown in C:\xampp\htdocs\web\ajax\register.php on line 28

当我将 dataType 更改为 html 时,它只会发布空白消息。

我刚刚进入 Web 开发,这似乎是一个奇怪的问题?我在 stackoverflow 上搜索了几个小时但一无所获。

我正在尝试发送 POST 请求并重定向到 ajax 页面,但这并没有发生。 Tt 只是发送一条空白消息,或者在这种情况下我设法让它抛出错误。

javascript jquery ajax post httprequest
1个回答
-2
投票

在控制台打印之前尝试解析json格式的数据:

var data = jQuery.parseJSON(data);

© www.soinside.com 2019 - 2024. All rights reserved.