由于PHP重定向,AJAX请求未完成



背景

在我的索引页面上,我试图执行一个ajax,它在数据库表中创建条目。必须为每个访问网站的用户创建这些表格条目
此索引页面是一个登录页面,如果用户的会话已经存在,则此页面将重定向到用户的仪表板页面。

问题

这里的问题是,如果用户的会话处于活动状态,并且点击了索引页面,那么页面会在ajax"finishesh"之前重定向,所以我无法在表中获得任何条目。

如果我可以让ajax"继续执行",即使在页面重定向时,我是否可以在重定向之前"等待"ajax完成??

请注意,我不能使用jquery重定向,因为我有服务器级别的验证来重定向,所以客户端不会起到任何作用。

请看下面的代码:

<?php
if(!(isset($_GET['var']) && $_GET['var'] == 'logout')){
?>
    <!-- jQuery -->
    <script src="assets/js/jquery.js"></script>
    <script>
    $.ajax({
            url: 'p/ajax_handler.php',
            data: 'ajax_action=tracker',
            type: 'post',
            success :function(data){
                data = data.trim();
                if(data != '1')
                    alert("something in backend went wrong, DB couldn't be updated"); 
            },
            error: function(xhr, textStatus, error){
                alert("Some ajax error occured, see console for details");
                console.log(xhr.statusText);
                console.log(textStatus);
                console.log(error);
            }
     }); 
    </script>

<?php
 //die("hi"); <-- if i un-comment this, ajax completes correctly as redirect is prevented
}
if(isset($_SESSION['sess_id']) && preg_match($pattern,$_SESSION['sess_id']))
{
    header('Location: p/main.php'); # <-- this is bummer
}

你就不能这么做吗?

<script>
$.ajax({
        url: 'p/ajax_handler.php',
        data: 'ajax_action=tracker',
        type: 'post',
        success :function(data){
            data = data.trim();
            if(data != '1')
                alert("something in backend went wrong, DB couldn't be updated");
            <?php
                if(isset($_SESSION['sess_id']) && preg_match($pattern,$_SESSION['sess_id'])) {
                    echo "$(location).attr('href','http://yoursite.com/p/main.php');";
                }
            ?>
        },
        error: function(xhr, textStatus, error){
            alert("Some ajax error occured, see console for details");
            console.log(xhr.statusText);
            console.log(textStatus);
            console.log(error);
        }
 }); 
</script>

您可以测试它是否是ajax调用,并避免重定向情况yes

if(isset($_SESSION['sess_id']) && preg_match($pattern,$_SESSION['sess_id']) 
&& !isset($_GET['ajax_action']))
{
    header('Location: p/main.php'); # <-- this is bummer
}

最新更新