我有一个通过AJAX调用提交的表单,该表单发送到名为function.php
的PHP文件。这就是我的AJAX调用:
$.ajax({
type: 'post',
cache: false ,
url: 'function.php',
data: noteSequence,
success: function(data) {
alert(data);
<?php
if (defined('RESTRICTED')) {
if (!isset($_SESSION['logged'])) {
header( 'Location: index.php' );
exit();
}
}
?>
}
});
在PHP文件中,我有这个if语句。如果这是真的,我希望页面重定向到index.php
。 header()
无法正常工作。在AJAX成功之后我尝试了window.location.href = 'index.php';
,但无论PHP语句是否为真,这都会重定向。目前我正在尝试使用会话来重定向用户但这不起作用。那么有人可以提供解决方案吗?
PHP代码:
if ($rows == 1) {
$_SESSION['logged'];
}
答案 0 :(得分:1)
在您的function.php中执行您的操作,然后在发送响应的末尾添加以下行
$login_status = false;
if (defined('RESTRICTED')) {
if (!isset($_SESSION['logged'])) {
$login_status = true;
}
}
$response = array();
$response['login_status'] = $login_status;
echo json_encode($response);
在你的JS代码中:
$.ajax({
type: 'post',
cache: false ,
url: 'function.php',
data: noteSequence,
success: function(data) {
data = JSON.parse(data);
if(data['login_status']) {
location.replace("index.php")
} else {
//do something else
}
}
});
答案 1 :(得分:0)
如果您希望浏览器重定向,则标头不会影响ajax调用的浏览器状态,浏览器也不会导航标头上的地址。相反,您应该使用客户端方法重定向浏览器,如下所示,
$.ajax({
type: 'post',
cache: false ,
url: 'function.php',
data: noteSequence,
success: function(data) {
if (data.notloggedin)
window.location.href = data.href;
else
//Your business
}
});
编辑:您应该在我的示例代码中正确返回数据以进行ajax调用需要json结果中的href属性。您应该编辑与“data”
相关的ajax结果的行为你需要为php.php提供类似下面的php代码但是请注意你应该参数化你对function.php的请求,否则它只能用于检查用户的会话。
<?PHP
header('Content-Type: application/json; charset=utf-8');
$myAjaxResult = array();
$myAjaxResult["notLoggedIn"] = true;
if (defined('RESTRICTED')) {
if (!isset($_SESSION['logged'])) {
$myAjaxResult["notLoggedIn"] = true;
}
else {
$myAjaxResult["notLoggedIn"] = false;
}
}
echo json_encode($myAjaxResult);
?>