我能够触发 js 文件,它确实会发出第一个警报,但我无法让第二个警报发生,php 文件在那里并且工作返回 0 但警报('finished post');不会出现。我认为它缺少一些语法。
$(function () {
$("#login_form").submit(function () {
alert('started js');
//get the username and password
var username = $('#username').val();
var password = $('#password').val();
//use ajax to run the check
$.post("../php/checklogin.php", { username: username, password: password },
function (result) {
alert('finished post');
//if the result is not 1
if (result == 0) {
//Alert username and password are wrong
$('#login').html('Credentials wrong');
alert('got 0');
}
});
});
});
这是php
session_start();
include 'anonconnect.php';
// username and password sent from form
$myusername= $_POST['username'];
$mypassword= $_POST['password'];
$sql = $dbh->prepare("SELECT * FROM Users WHERE UserLogin= :login");
$sql->execute(array(':login' => $myusername));
$sql = $sql->fetch();
$admin = $sql['admin'];
$password_hash = $sql['UserPass'];
$salt = $sql['salt'];
/*** close the database connection ***/
$dbh = null;
if(crypt($mypassword, $salt) == $password_hash){
// Register $myusername, $mypassword and redirect to file
$_SESSION['myusername'] = $myusername;
$_SESSION['loggedin'];
$_SESSION['loggedin'] = 1;
if($admin == 1){
$_SESSION['admin'] = 1;
}
header("location:search.php");
}
else {
$_SESSION['loggedin'];
$_SESSION['loggedin'] = 0;
echo 0;
}
最佳答案
好的,我会尝试一下,看看我们能否解决这个问题。首先,让我们稍微清理一下您的代码 - 干净的代码总是最容易调试的:
$(function () {
$("#login_form").on('submit', function(){
console.log('form submitted');
// get the username and password
var login_info = { username: $('#username').val(), password: $('#password').val() }
// use ajax to run the check
$.ajax({
url: '../php/checklogin.php',
type: 'POST',
data: login_info,
success: loginHandler
error: function(xhr, status, err){ console.log(xhr, status, err); }
});
return false;
});
function loginHandler(loggedIn){
if (!loggedIn) {
console.log('login incorrect');
} else {
console.log('logged in');
}
}
});
...好的,我们现在看起来好多了。让我们快速回顾一下所做的更改。
首先,将
alert
换成console.log
- 不那么烦人了。打开您的控制台进行检查 -command + optn + J
如果您使用的是 Chrome。其次,我们稍微压缩了登录信息 - 这只是为了美观,让我们的代码更简洁。实际上,您应该在需要再次使用变量时使用它们,在这种情况下,您只使用它们一次。
接下来,我们将
$.post
函数替换为$.ajax
。这给了我们两件事——一个是对请求细节的更好控制,第二个是错误回调,这在这种情况下特别重要,因为您几乎肯定会收到服务器错误,这是您的原始问题。 Here are the docs for$.ajax
任何进一步的澄清。我们还将成功处理程序指向一个函数,以尽量减少此处的嵌套。可以看到下面声明的函数,它会接收服务器返回的数据。
最后我们返回 false,这样页面就不会刷新。
现在,让我们进入正题。使用此代码时,您应该会在控制台中看到一些内容。第一个可能是一条红色消息,类似 500 internal server error
,第二个应该是 ajax 函数的错误回调的结果。如果您点击网络标签并查看请求和响应的详细信息,您可以在 Chrome 中获得更多详细信息。
我无法修复您的 PHP,因为您没有发布它,但我假设您将继续进行编辑或自行解决。解决服务器问题后,您应该会返回一个干净的 console.log
以及您发回的响应,然后您就可以继续了。
或者,由于缺少页面刷新,这将起作用,在这种情况下,您可以忽略前两段并宣布胜利:)
希望这对您有所帮助!
关于php - 无法让 ajax 发布工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348404/