带有Ajax的PHP登录脚本在同一页面上加载标题

时间:2017-08-01 04:48:21

标签: php jquery ajax sqlite html-form

我有一个PHP登录脚本,我想用ajax执行。如果成功,PHP脚本会将用户带到页面,但根据我使用的ajax请求,header位置也会加载到$('.logresult') div我如何执行此操作以使其转到{{ 1}}成功时的位置,如果没有,则显示header中的错误。以下是我的代码:

Ajax请求

$('logresult')

PHP登录脚本

$('#submit_log').click(function(e) {
    e.preventDefault();
    var data = $('#loginForm').serialize(),
    form = $('#loginForm');
    $.post($(form).attr("action"), data, function(data) {
        $('.logresult').html(data);
    })
});

我猜这个问题是session_start(); require_once ("db.php"); $db = new MyDB(); if(isset($_POST['log_name']) && isset($_POST['log_password'])) { $username = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['log_name']); $password = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['log_password']); $sql = $db->prepare("SELECT * FROM users WHERE uname = ?"); $sql->bindParam(1, $username, SQLITE3_TEXT); $ret = $sql->execute(); $count = $db->prepare("SELECT COUNT(*) as COUNT FROM users WHERE uname = ?"); $count->bindParam(1, $password, SQLITE3_TEXT); $count_ret = $count->execute(); if (count($count_ret) == 1) { while ($row = $ret->fetchArray(SQLITE3_ASSOC)) { $id = $row['userid']; $regas = $row['regas']; $uemail = $row['uemail']; $pword = $row['pword']; if (password_verify($password, $pword)) { $_SESSION['log_id'] = $id; $_SESSION['log_name'] = $username; $_SESSION['regas'] = $regas; $_SESSION['uemail'] = $uemail; header("Location: index.php?log_id=$id"); exit(); } else { echo "Information incorrect"; exit(); } } } } 但是我真的不知道如何解决这个问题(一般来说是ajax的新手)。感谢

2 个答案:

答案 0 :(得分:0)

如果要更改位置,请不要使用ajax。 ajax的使用主要是在你不想重页加载的时候。在大多数情况下,ajax响应是json并使用javascript处理响应。

答案 1 :(得分:0)

如果您想在成功后更改页面的位置,可以通过您的ajax来实现,我会一直这样做。让网站使用ajax并重定向成功也并不罕见,我已经看过很多了。在你的PHP中,而不是做:

header("Location: index.php?log_id=$id");
exit();

为了简化现有脚本的使用,您可以发回javascript:

die("<script>window.location='http://www.example.com/index.php?log_id={$id}';</script>");

如果我要重做你所拥有的东西,我会以PHP的动作/指令的形式接收json,并且成功解释javascript指令,但这更复杂。