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

时间:2015-10-10 21:25:41

标签: javascript php jquery ajax redirect

背景

在我的索引页面上,我正在尝试执行ajax,这使得在db表中进行输入。必须为访问该网站的每个用户制作这些表项。 此索引页面是一个登录页面,如果用户的会话已存在,则此页面将重定向到用户的仪表板页面。

问题

这里的问题是,如果用户激活了会话并且他/她点击了索引页面,那么页面会在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
}

2 个答案:

答案 0 :(得分:2)

你不能这样做吗?

<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>

答案 1 :(得分:1)

你可以测试它是否是ajax调用并避免重定向case yes

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