2014-03-25 47 views
-2

我寫的PHP腳本目前使用重定向:標題將您移至下一頁。PHP重定向:標題,但帶有AJAX

它是一個登錄表單,並且如果成功它需要您註冊succes.php。 如果不成功(事情沒有被正確填寫),它會在會話中存儲錯誤消息並重新載入register-form.php以重試。

最初這是工作絕對正常,因爲所有的頁面在單獨的(如register-success.php是它自己的頁面與完整的HTML)。

但我已經改變它,讓你留在同一頁面,並通過AJAX加載主要的div。這意味着使用重定向不再有效。

此,目前的形式是成功的重定向:通過AJAX

if(register($email_address, $username, $password) === true){ 

     // Sends an email 
     send_email($email_address); 

     $succeeded = true; 

     header("Location: register-success.php?username=$username"); 
     exit; 
    } 

取而代之的是簡單的重定向的,我怎麼能有這只是重裝寄存器succes.php,類似下面,但在PHP?

var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("login-register-wrapper").innerHTML=xmlhttp.responseText; 
    } 
    } 

xmlhttp.open("GET","register-success.php",true); 
xmlhttp.send(); 
+0

爲什麼你需要重定向,你就不能包括在成功登錄您的登錄腳本成功頁面?這樣你只刷新頁面的一部分,你想刷新,這就是爲什麼你首先使用ajax。 – jeroen

+0

@jereon聽起來像我想要實現的,我希望用AJAX刷新來替換重定向,就像我上面提出的那樣。 – Francesca

+0

因此,不用重定向,直接包含文件,其內容將在ajax調用中返回(並顯示在'#login-register-wrapper'中)。 – jeroen

回答

0

您可以通過修改window.location來執行JavaScript中的重定向。例如使用JSON作爲返回值:

{ 
    "Location": "http://example.com" 
} 

和重定向如果Location是存在於JSON。

+0

那麼,這將在OP中發佈的成功聲明中出現?這是我的理解,你不能將JavaScript添加到PHP?這是一個完整註冊腳本的pastebin http://pastebin.com/CgY6312y – Francesca

+0

@Francesca使用'echo json_encode(['Location'=>'My-Location']);'然後''JSON.parse'響應在JavaScript和'window.location = json.Location'中。 – TimWolla

+0

你能提供一個上面代碼的例子嗎? echo語句是否在PHP中? JS在哪裏去了一個函數?函數在哪裏調用? – Francesca

0

register.php

<?php 
$succeeded = false; 
if(isset($_POST['btn'])) 
    { 
     $username=$_POST['username']; // etc. 
     if($username=="abc"){ 

      // Sends an email 
      //send_email($email_address); 

      $succeeded = true; 

      // header("Location: register-success.php?username=$username"); 
      // exit; 
     } 
    } 

?> 
<!DOCTYPE html> 
<html class="no-js"> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <title>PHP Test</title> 
     <meta name="description" content=""> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 

     <!-- Place favicon.ico and apple-touch-icon(s) in the root directory --> 

    </head> 
    <body> 
     <form action="" method="post"> 
      <input type="text" name="username" placeholder="Username"/>   
      <input type="submit" name="btn" value="Register"> 
     </form> 
     <div class="result"></div> 

     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
     <?php if($succeeded){ ?> 

     <script> 
     $.post("register-success.php?username=<?php echo $username;?>", function(data) { 
      $(".result").html(data); 
     }); 
     </script> 

     <?php } ?> 
    </body> 
</html> 

寄存器success.php

<?php 
if(isset($_GET['username'])) 
{ 
    ?> 

<div> 
    <h1>Welcome <?php echo $_GET['username'];?></h1> 
</div> 
<?php } ?> 
+0

這不起作用。首先,它會刪除我已經擁有的大部分代碼,導致其他區域失敗。我怎樣才能簡單地替換標題位置:改爲使用AJAX刷新? – Francesca

+0

問題是,你不能。請參閱PHP是服務器端,無法與Javascipt進行通信。有一些您可能想要挖掘的php ajax [libraries](http://www.xajax-project.org/)。 –

+0

因此,刷新使用AJAX的頁面是完全不可能的?它必須直接到一個新的頁面...是你在說什麼?使用PHP進行頁面更新絕對沒有辦法? – Francesca