javascript - 引导模式的 Ajax 调用不起作用
问题描述
我正在尝试对 Bootstrap 登录模式进行简单的 Ajax 调用。登录 Modal 的主要 HTML 代码如下所示:
<form method="post" id="loginForm">
<div id="loginMessage"></div>
<div class="modal-footer">
<button type="button" class="btn btn-success mr-auto" data-target="#signupModal" data-toggle="modal" data-dismiss="modal">Register</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<input class="btn" name="login" type="submit" id="inputButton" value="Login">
</div>
</form>
如果模态的整个 HTML 代码有帮助:https ://jsfiddle.net/aslah/hykxLqd5/2/
jQuery 代码如下所示:
$('#loginForm').submit(function(event){
//prevent default php processing
event.preventDefault();
//collect user inputs:
var datatopost = $(this).serializeArray();
//send the user data to login.php using AJAX
$.ajax({
url: "login.php",
type : "POST",
data : datatopost,
success : function(data){
if(data == 'success'){
window.location = "mainpage.php";
}else{
$('#loginMessage').html(data);
}
},
error : function(){
$('#loginMessage').html('<div class="alert alert-danger">There was an error with the AJAX call. Please, try again later!</div>');
}
});
});
这是我的 login.php 代码:
<?php
//starting the session
session_start();
//connecting to database
include('connection.php');
//check user inputs
// DEFINE ERROR MESSAGES //
$missingEmail = '<p><strong>Please enter your email address!</strong></p>';
$missingPassword = '<p><strong>Please enter a password!</strong></p>';
// $email = $_POST["loginEmail"]
// $password = $_POST["loginPassword"]
if(empty($_POST["loginEmail"])){
$error .= $missingEmail;
}else{
$email = filter_var($_POST["loginEmail"], FILTER_SANITIZE_EMAIL);
}
if(empty($_POST["loginPassword"])){
$error .= $missingPassword;
}else{
$password = filter_var($_POST["loginPassword"], FILTER_SANITIZE_STRING);
}
//If there are any ERRORS
if($error){
$resultMessage = '<div class="alert alert-danger">'. $error .'</div>' ;
echo $resultMessage ;
}else{
$email = mysqli_real_escape_string($link, $email);
$password = mysqli_real_escape_string($link, $password);
// $password = md5($password); no secure
$password = hash('sha256', $password);
//check if the user is registered by matching EMAIL & PASSWORD
$sql = "SELECT * FROM users WHERE email = '$email' AND password = '$password' AND activation='activated' ";
$result = mysqli_query($link, $sql);
//if any errors while running the query
if(!$result){
echo '<div class="alert alert-danger"> Error running the query!</div>';
exit;
}
//if login failed print ERROR
$count = mysqli_num_rows($result);
if($count !== 1){
echo '<div class="alert alert-danger">Wrong username or password</div>';
}else{
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['username'] = $row['username'];
$_SESSION['email'] = $row['email'];
//if remember me is not checked
if(empty($_POST['rememberme'])){
echo "success";
}else{
// if rememberme is checked
}
}
}
?>
在提交登录按钮时,我想将用户重定向到 mainpage.php。我尝试了在这里找到的所有不同的修复程序,但没有任何效果。我无法弄清楚我做错了什么。非常感谢任何帮助。
解决方案
阿斯拉·侯赛因
我已经测试了你的代码。引起我注意的第一件事是关于未定义变量的注意事项$error
。可能您已经在其中定义了它,include('connection.php');
但如果没有,这可能会导致您所期望的 PHP 输出出现问题。
此外,如果您 100% 确定控制台返回消息success
- 您可以将 JavaScript 中的检查更改为:
if(data.indexOf('success') >= 0){
window.location = "mainpage.php";
}else{
$('#loginMessage').html(data);
}
可能不是问题的最佳解决方案,但至少会告诉您重定向正在工作
推荐阅读
- android - 当我使用下面的代码时,底页行为没有隐藏
- python - 扩展 Scrapy 暂停和恢复扩展以定期保存请求
- android - 不使用更新的统一
- python - 从具有多个选项卡的网站中提取数据
- python - 如何在 HTML 模板中调用表单的视图
- git - 从特定提交到现在创建拉取请求
- reactjs - 当我单击链接 URL 更改但未查看时反应路由器问题 || 我在应用程序中使用 React 和 Redux
- sql - 选择客户的第一份合同以在 COUNT 中计算他们当时的年龄?
- r - 在日期中格式化 POSIX 场景
- android - 我怎样才能在android中获得这种textview