2016-01-15 64 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

不完全如此,我修改了你的情況的答案。但請注意,這不是您業務的全部答案,只是您業務的檢查和重定向部分。 –