gpt4 book ai didi

php - 无法让 ajax 发布工作

转载 作者:行者123 更新时间:2023-11-30 17:54:26 25 4
gpt4 key购买 nike

我能够触发 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com