В настоящее время я работаю над формой регистрации с использованием PHP, Ajax, Jquery и т. Д. Я создал форму регистрации, и когда я нажимаю кнопку регистрации, учетная запись регистрируется в базе данных, но кнопка не перенаправляет пользователя нана следующей странице, если не будет выполнена перезагрузка (f5).(Сессия все еще создана).
Я предположил, что функция в моем файле main.js игнорируется.Страница регистрации ajax выглядит следующим образом:
<?php
//allow the config
define('__CONFIG__', true);
//require the config
require_once "../inc/config.php"; //possibly have to change the location
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//Always return JSON format
//header('Content-Type: application/json');
$return = [];
$email = Filter::String( $_POST['email'] );
$username = Filter::String($_POST['username']);
$skills = Filter::String($_POST['skills']);
//$captcha = Filter::String($_POST['captcha']);
$user_found = User::Find($email, $username);
$activationCode = DB::generateCode();
$credit = 0;
mysqli_report(MYSQLI_REPORT_ALL);
//if($_SESSION['captcha'] === $captcha){
// make sure the user does not exist.
if($user_found) {
// User exists
// We can also check to see if they are able to log in.
$return['error'] = "You already have an account";
$return['is_logged_in'] = false;
} else {
// User does not exist, add them now.
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
// make sure the user CAN be added AND is added.
$addUser = $con->prepare("INSERT INTO users(username, email, skills, password, credit, activationCode) VALUES(:username, :email, :skills, :password, :credit, :activationCode)");
$addUser->bindParam(':username', $username, PDO::PARAM_STR);
$addUser->bindParam(':credit', $credit, PDO::PARAM_STR);
$addUser->bindParam(':activationCode', $activationCode, PDO::PARAM_STR);
$addUser->bindParam(':email', $email, PDO::PARAM_STR);
$addUser->bindParam(':skills', $skills, PDO::PARAM_STR);
$addUser->bindParam(':password', $password, PDO::PARAM_STR);
$addUser->execute();
$user_id = $con->lastInsertId();
$_SESSION['user_id'] = (int) $user_id;
sendMail ($email, $name='', $username, $activationCode);
$return['is_logged_in'] = true;
// $return=header("Location:localhost://comp1687/dashboard.php?message=welcome");
$return['redirect'] = "dashboard.php?message=welcome";
}
// return the proper information back to Javascript to redirect us.
echo json_encode($return, JSON_PRETTY_PRINT);
} else {
//Kill the script. Redirect the user.
exit('Invalid URL');
}
?>
Код в main.js выглядит следующим образом:
$(document)
.on("submit", "form.js-register", function(event) {
event.preventDefault();
var _form = $(this);
var _error = $(".js-error", _form);
var dataObj = {
email: $("input[type='email']", _form).val(),
password: $("input[type='password']", _form).val(),
username: $("input[id='username']", _form).val(),
skills: $("input[id='skills']", _form).val(),
};
if(dataObj.email.length < 6) {
_error
.text("please enter a valid email address").show()
.show();
return false;
} else if (dataObj .password.length < 8) {
_error
.text("please enter a password that is at least 8 characters long.")
.show();
return false;
}
// Assuming the code gets this far, we can start the ajax process
_error.hide();
$.ajax({
type: 'POST',
url: 'comp1687/ajax/register.php', //possibly have to change the location
data: dataObj,
dataType: 'json',
async: true,
})
.done(function(data) {
// Whatever data is
if(data.redirect !== undefined) {
window.location = data.redirect;
//window.location.replace(data.redirect);
} else if(data.error !== undefined) {
_error
.text(data.error)
.show();
}
})
// .fail(function ajaxFailed(e) {
// //this failed
//
// })
// .always(function ajaxAlwaysDoThis(data) {
// //always do
// console.log('Always');
// })
return false;
})
//
.on("submit", "form.js-login", function(event) {
event.preventDefault();
var _form = $(this);
var _error = $(".js-error", _form);
var dataObj = {
username: $("input[type='text']", _form).val(),
email: $("input[type='email']", _form).val(),
skills: $("input[type='text']", _form).val(),
password: $("input[type='password']", _form).val()
};
if(dataObj.email.length < 6) {
_error
.text("Please enter a valid email address")
.show();
return false;
} else if (dataObj.password.length < 8) {
_error
.text("Please enter a password that is at least 8 characters long.")
.show();
return false;
}
// Assuming the code gets this far, we can start the ajax process
_error.hide();
$.ajax({
type: 'POST',
url: 'comp1687/ajax/login.php', //possibly have to change the location
data: dataObj,
dataType: 'json',
async: true,
})
.done(function(data) {
// Whatever data is
if(data.redirect !== undefined) {
window.location = data.redirect;
//window.location.replace(data.redirect);
} else if(data.error !== undefined) {
_error
.html(data.error)
.show();
}
})
// .fail(function ajaxFailed(e) {
// // This failed
// })
// .always(function ajaxAlwaysDoThis(data) {
// // Always do
// console.log('Always');
// })
return false;
})
Функция, которая, как мне кажется, игнорируется, является функцией .done.Есть ли какие-либо очевидные причины, по которым вы могли бы предположить, что моя кнопка регистрации не перенаправляет пользователя?