2016-01-15 115 views
1

我有一个表单正在通过AJAX调用提交,该调用发送到名为function.php的PHP文件。这是我的AJAX调用是什么样子:使用Ajax调用PHP重定向

$.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。 A header()不起作用。在AJAX成功后,我尝试了window.location.href = 'index.php';,但无论PHP语句是否为真,这都会重定向。目前我试图使用会话来重定向用户,但那不工作。所以任何人都可以提供解决方案吗?

PHP代码:

if ($rows == 1) { 
    $_SESSION['logged']; 
} 
+1

可以设置标志你的'function.php'为你的'if(!isset($ _SESSION ['logged']))'条件并返回它。如果标志为true,则使用'location.replace('index.php')'重定向用户。 – Apb

+0

或者我可能会粘贴到另一个PHP文件,并要求它? – Ryan

+0

没有必要。只需在'function.php'中检查登录状态并将结果传递给ajax即可。 – Apb

回答

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 
     } 
    } 
}); 
+0

感谢您的回应,非常感谢。不幸的是没有运气 if($ rows == 1){ $ _SESSION ['logged']; } 如果(定义( '受限')){ 如果(isset($ _ SESSION [ '记录'])!){$ login_status = TRUE; } } $ response = array(); $ response ['login_status'] = $ login_status; echo json_encode($ response); – Ryan

+0

你得到什么错误或回应? – Apb

+0

我的PHP工作很出色,我得到了这个:{“login_status”:true}我认为它对ajax的if语句有问题? – Ryan

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结果A HREF属性。您应该编辑与“数据”相关的ajax结果的行为

您需要在function.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); 

?> 
+0

感谢您的回复。 slighlty困惑我将如何设置,但我知道你的意思。所以在我的PHP文件中,我可以有$ redirect = true,然后在我的ajax中,如果$ redirect = true重定向? – Ryan

+0

不完全如此,我修改了你的情况的答案。但请注意,这不是您业务的全部答案,只是您业务的检查和重定向部分。 –