背景
在我的索引页面上,我试图执行一个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
}