背景
在我的索引页面上,我正在尝试执行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
}
答案 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
}