无论我改变什么,我所能做的就是获取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 只是发送一条空白消息,或者在这种情况下我设法让它抛出错误。
在控制台打印之前尝试解析json格式的数据:
var data = jQuery.parseJSON(data);