我已经构建了一个使用AJAX提交表单数据的登录脚本。
PHP部分在没有AJAX的情况下运行良好。但是系统不能与AJAX实现一起工作。
它始终显示以下消息,即使 PHP 文件返回 true[正确的用户名
用户名/密码不正确
超文本标记语言Result Div
<div id="user-result" align="center"></div>
JQuery
<script type="text/javascript">
$(document).ready(function () {
var form = $('#loginform');
form.submit(function (ev) {
ev.preventDefault();
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
cache: false,
data: form.serialize(),
success: function (data) {
if (data == "true") {
$("#user-result").html("<font color ='#006600'> Logged in | Redirecting..</font>").show("fast");
setTimeout(
function () {
window.location.replace("index.php");
}, 1500);
} else {
$("#user-result").html("<font color ='red'> Incorrect Username/Password</font>").show("fast");
}
}
});
});
});
</script>
fn_login.php
<?php
{
session_start();
include_once 'db_connect.php';
if (isset($_POST))
{
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
$logpwd = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$stmt = $conn->prepare("SELECT password FROM manager WHERE email = ? LIMIT 1");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
// get variables from result.
$stmt->bind_result($password);
$stmt->fetch();
// Check if a user has provided the correct password by comparing what they typed with our hash
if (password_verify($logpwd, $password))
{
$sql = "SELECT * from manager WHERE email LIKE '{$email}' LIMIT 1";
$result = $conn->query($sql);
$row=mysqli_fetch_array($result);
$id = $row['id'];
$conn->query("UPDATE manager SET lastlogin = NOW() WHERE id = $id");
$_SESSION['manager_check'] = 1;
$_SESSION['email'] = $row['email'];
$_SESSION['fullname'] = $row['fullname'];
$_SESSION['designation'] = $row['designation'];
$_SESSION['id'] = $row['id'];
echo "true";
}
else {
die();
}
}
}
?>
有人可以指出代码/实践中的错误吗?
EDIT
刚刚尝试禁用AJAX,当用户名/密码正确时,PHP文件可以正确回显true
您可以回显< code > JSON _ encode(array(' success ' =
<?php
{
session_start();
include_once 'db_connect.php';
if (isset($_POST))
{
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
$logpwd = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$stmt = $conn->prepare("SELECT password FROM manager WHERE email = ? LIMIT 1");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
// get variables from result.
$stmt->bind_result($password);
$stmt->fetch();
// Check if a user has provided the correct password by comparing what they typed with our hash
if (password_verify($logpwd, $password))
{
$sql = "SELECT * from manager WHERE email LIKE '{$email}' LIMIT 1";
$result = $conn->query($sql);
$row=mysqli_fetch_array($result);
$id = $row['id'];
$conn->query("UPDATE manager SET lastlogin = NOW() WHERE id = $id");
$_SESSION['manager_check'] = 1;
$_SESSION['email'] = $row['email'];
$_SESSION['fullname'] = $row['fullname'];
$_SESSION['designation'] = $row['designation'];
$_SESSION['id'] = $row['id'];
echo json_encode(array('success'=>true));
}
else {
die();
}
}
}
而杰奎里变成了
<script type="text/javascript">
$(document).ready(function () {
var form = $('#loginform');
form.submit(function (ev) {
ev.preventDefault();
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
cache: false,
data: form.serialize(),
success: function (data) {
if (data.success) {
$("#user-result").html("<font color ='#006600'> Logged in | Redirecting..</font>").show("fast");
setTimeout(
function () {
window.location.replace("index.php");
}, 1500);
} else {
$("#user-result").html("<font color ='red'> Incorrect Username/Password</font>").show("fast");
}
}
});
});
});
</script>
后面有空格吗?
因此,AJAX响应在
true
之后有空格。
解决方案:
移除<代码>?
它不会影响任何PHP功能。
你的AJAX响应将没有空格。
不包括结束标记< code >?
调试 AJAX 的提示:
1)始终使用火狐(与火虫添加)在或铬。
2)使用Firebug的
Console
选项卡,检查哪些AJAX请求正在进行。
3) 在这里,您可以看到输入参数、标题和最重要的响应。
4)因此,简而言之,您可以调试整个AJAX请求生命周期。
问题内容: 我有以下JS 和以下控制器代码: addarticle()javascript ajax可以运行并将vars发送到服务器并进入db,但是,javascript然后将运行错误函数而不是成功函数。http响应代码是200,我以为它将运行Success函数。有什么建议? 问题答案: 您需要从控制器返回json,因为这是jQuery期望的。您可以返回即 或者,您可以将html设置为数据类型(也
问题内容: function ChatServerQuery(data_json) { 我执行对服务器的请求的功能。问题是我无法返回从服务器收到的文本。我不知道如何从匿名函数(事件成功)转移到ChatServerQuery(可以在其中轻松将其取回)。 问题答案: 您最好更改您的方法以反映AJAX请求的异步性质。 使用回调函数 然后,您将使用它: 使用承诺对象 返回实现Promise iterfac
基类控制器里有success方法,用于api的成功返回输出 /** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param mixed $data 返回的数据 * @param array $header 发送的Header信息 * @return void */ protected f
大家好, 这就是我的两难处境:在Chrome、Edge和Internet Explorer上,AJAX调用只返回成功,运行以下查询,一切都很好。但是,在Firefox中,AJAX调用返回时控制台日志中有一个错误,最终第二次被触发(不是有意的)以返回成功,从而开始查询等。。。警报发出“错误”信号。 我正试图从最终用户的角度解决这个问题。该函数正在运行,但如果警报返回时出错,用户将不知道他们是否正确完
问题内容: 我正在使用AngularJS 1.1.3将新的$ resource与promises一起使用… 我如何从中获得回调?我尝试使用与$ http相同的方法: 但是没有“成功”也没有“错误”功能… 我也尝试过: 即使返回的是 404 ,也总是打印“成功,有数据” 。 任何想法? 谢谢 问题答案: 从角度 资源 和角度1.2 的 PR开始 ,角度将切换为执行成功/错误检查的更简单方法。无需附加
问题内容: 我有以下 我有一个运行一些ajax的函数,然后根据ajax是否成功返回true或false。我从代码的多个位置调用了这个ajax函数。 因为该函数在ajax完成之前结束,所以它总是返回false。如何避免这种情况? 我读到一些建议我在函数中执行的操作,然后将和函数移至我的和函数。但是,在我的方法中,我进行了大量的计算。很多代码。因此,问题在于,如果我将功能移至其他功能,那么我将复制一堆