AJAX请求登录页面上的PHP文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX请求登录页面上的PHP文件相关的知识,希望对你有一定的参考价值。
我偶然发现了php中的AJAX请求问题,但我找不到与我在代码中编写的内容相近的主题。
首先,我想使用对PHP文件的AJAX请求为我的Web应用程序创建一个登录页面。
在“login.php”中:
$(document).ready(function(){
var $errorWrapper = $('#error-handler'); // Error div
var $errorCardText = $('#error-handler p'); // Error div text
var $user = $('#user-input'); // Input field for username
var $pwd = $('#pwd-input'); // Input field for password
$('#login-btn').on('click', function(){
var $data = {
'username': $user.val(),
'password': $pwd.val()
};
$dataStr = JSON.stringify($data);
$.ajax({
type: 'POST',
url: 'php/loginValid.php',
data: {json: $dataStr},
dataType: 'JSON',
contentType: 'application/json; charset=utf-8',
success: function(data){
alert("Success");
if(data.status == 0){
$errorWrapper.css('display', 'block');
$errorCard.text("Username or password incorrect!");
}else if (data.status == 2){
$errorWrapper.css('display', 'block');
$errorCard.text("No matching account for username inserted.");
}
}
});
});
});
在“loginValid.php”中(它是从AJAX捕获POST请求的文件):
<?php
include 'classes.php';
//Catch the AJAX POST request form server and decode it from JSON
$request = json_decode($_POST['json'], true);
$username = $request['username'];
$password = $request['password'];
$loginObj = new LoginValid($username, $password);
$code = $loginObj -> checkValidation();
$response = array('status' => $code);
echo json_encode($response));?>
“classes.php”文件实现了检查凭据的功能:
class LoginValid{
private $username;
private $pwd;
private $statusCode;
function __construct($user, $pass){
$this->$username = $user;
$this->$pwd = hash('sha512', $pass);
}
public function checkValidation (){
include '../conf/db.php';
$conn = new mysqli($servernameDB, $userDB, $passwordDB, $dbName);
$stmt = $conn -> prepare ("SELECT FROM users WHERE username = ?");
$stmt -> bind_param('s', $this->$username);
$stmt -> execute();
$stmt -> store_result();
$result = $stmt -> get_result();
$row = $result -> fetch_assoc();
// Check if the credentials match and return the status code for jQuery error handler
if ($result -> num_rows == 0){
$this->$statusCode = 2;
}else{
if ($row['username'] == $this -> $username && $row['password'] == $this->$pwd){
$this -> $statusCode = 1;
session_start();
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
header("Location: ../index.php");
}else{
$this -> $statusCode = 0;
}
}
return $this -> $statusCode;
}
}
“db.php”仅存储数据库凭据,以便在整个应用程序中更轻松地进行集成。
我无法弄清楚为什么它没有进入成功回调。我提到了这样一个事实:我已经尝试在发出AJAX请求之前提醒JSON字符串并且它显示正确的事情。
谢谢。
答案
这是错的:
contentType: 'application/json; charset=utf-8',
当您在data:
中使用对象作为$.ajax
选项时,它使用URL编码格式,而不是JSON。 json
参数的值是JSON的事实是不相关的,它仍然包含在URL编码的参数中。你应该省略那个选项。
如果你这样做会更简单:
data: $data,
然后在PHP脚本中你可以使用$_POST['username']
和$_POST['password']
,你不需要调用json_decode()
。
以上是关于AJAX请求登录页面上的PHP文件的主要内容,如果未能解决你的问题,请参考以下文章