我偶然发现了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字符串,并且它显示正确的内容。
谢谢。
答案 0 :(得分:0)
这是错误的:
public CheckingAccount(string name, double amount) : base(name,amount)
{
}
在contentType: 'application/json; charset=utf-8',
中将对象用作data:
选项时,它使用URL编码格式,而不是JSON。 $.ajax
参数的值是JSON的事实并不重要,它仍然包装在URL编码的参数中。您应该忽略该选项。
如果您这样做,会更简单:
json
然后在PHP脚本中可以使用data: $data,
和$_POST['username']
,而无需调用$_POST['password']
。