2010-09-14 167 views
3

所以我有一個PHP函數用於重定向重定向父頁面加載標籤

public function redirect($url, $permanent=false, $statusCode=303) { 
    if(!headers_sent()) { 
     header('location: '.$url, $permanent, $statusCode); 
    } else { 
     echo "<script>location.href='$url'</script>"; 
    } 
    exit(0); 
} 

它的完成我想知道,到目前爲止,但讓我們說,我加載通過AJAX一個選項卡,它要求用戶要因此理想情況下,當選項卡加載並檢測到用戶未登錄時,將其重定向到索引頁面。然而,相反,重定向頁面(在我的情況下爲http://localhost/something/index.php)只是加載在標籤內部,這是有道理的,但顯然不是我想要發生的:)

但是,有沒有一個PHP解決方案來做到這一點?或者,如果用戶沒有登錄,我應該在根級別從加載的AJAX選項卡調用JavaScript重定向功能?

編輯:對不起。爲了澄清我的意思是標籤,它只是HTML通過AJAX

加載到DIV標籤
+0

您是否使用iframe作爲標籤? – sheeks06 2010-09-14 04:25:27

回答

3

你的問題不是關於你所說的「標籤」是什麼完全清楚

也許這會爲你工作使用

top.location.href='$url' 
+0

非常感謝。起初,這似乎並沒有爲我工作,因爲它似乎工作更像this.top.location.href ='$ url' ,但是當我鍵入window.top.location.href ='$ url'它的工作精細!謝謝 – 2010-09-15 21:10:36

1

你可以嘗試

PHP函數

public function redirect($url, $permanent=false, $statusCode=303) { 

    if($_SERVER['HTTP_X_REQUESTED_WITH'] === "XMLHttpRequest"){ 
    die("AjaxRequest"); 
    } 
    else{ 
     if(!headers_sent()) { 
      header('location: '.$url, $permanent, $statusCode); 
     } else { 
      echo "<script>location.href='$url'</script>"; 
     } 
     exit(0); 
    } 
    } 

JAV ascript功能

function ajaxresponse() 
{ 
var response = //your ajax request response 

if(response == 'AjaxRequest') 
{ 
location.reload(); 
} 
} 

釋: 在PHP首先檢查是否是AJAX請求。 所以爲了重定向,發送來自php的響應作爲ajax會話,這樣你就可以在javascript中查看這個響應,而不會發生重定向。

在javascript中檢測到此響應後,您可以將JavaScript函數重定向到索引頁面。

希望這會有所幫助

+0

這似乎是我的特定設置的方式。今晚我回家時我會檢查一下。謝謝, – 2010-09-14 13:48:48

+1

我最終得到了上面的例子工作,我最終通過更換'die(「AjaxRequest」);''與'echo「來混合你的答案」; '因爲有時當一個「標籤」通過AJAX加載並且header()尚未設置時,我仍然希望它在頂層重定向。再次感謝! – 2010-09-15 21:14:33

+0

我希望我隨意的喋喋不休。 :) – 2010-09-15 21:14:57