2011-02-23 41 views
-1

我有這樣的代碼json_encode問題

if($_POST){ 
    // response hash 
    $response = array('type'=>'', 'message'=>''); 

    try{ 
     // do some sort of data validations, very simple example below 
     $required_fields = array('name'); 
     foreach($required_fields as $field){ 
      if(empty($_POST[$field])){ 
       throw new Exception('field is empty'); 
      }    
     } 

     // ok, field validations are ok 
     // now add to data to DB, Send Email, ect. 

     // let's assume everything is ok, setup successful response 
     $response['type'] = 'success'; 
     $response['message'] = "Done"; 
    }catch(Exception $e){ 
     $response['type'] = 'error'; 
     $response['message'] = $e->getMessage(); 
    } 
    // now we are ready to turn this hash into JSON 
    print json_encode($response); 
    exit; 
} 

,我想重定向到 '成功' 後頁面(ok.html)。我怎樣才能使它

問候

+1

爲什麼要在返回JSON時重定向到HTML頁面?我不明白。 – 2011-02-23 20:19:34

+0

我的猜測是,在成功消息返回 – 2011-02-23 20:21:24

+0

@Pekka之後,我想用'window.location'從客戶端重定向,因爲Pin Cody並不瞭解HTTP工作原理。 – zzzzBov 2011-02-23 20:29:26

回答

1

您可以重定向頁面:

window.location = 'ok.html'; 

但最好是改變使用JavaScript當前頁面內容。

+0

不,我想用PHP親愛的JSON – 2011-02-23 20:24:44

+0

一旦你用'print(json_encode())'輸出了json字符串,你就不能繼續使用PHP重定向。 PHP將已經發送了它的頭文件,並且不會允許你使用'header(「Location:http://example.com/ok.html」)重定向;'必須在客戶端用javascript完成建議如果JSON已經輸出。 – 2011-02-23 20:28:19

+0

@Pin Cody - 您可以發送有關頁面重定向的JSON信息。 – 2011-02-23 20:29:56

1

重定向在PHP中通常使用

header("Location: NEWLOCATION"); 

哪裏NEWLOCATION是url到新的頁面進行。

在您輸出頁面上的任何信息之前,應該調用它,因爲標題總是在任何其他內容之前發送(並且以後無法發送)。

如果你希望在輸出別的東西之後使用header函數,只需將所有的輸出保存在一個變量中,而不是echo(「output」)做$ myvar。=「output」;

然後,在文件結尾處,您將知道是否要重定向,請執行echo($ myvar);

0

將某些內容回顯給瀏覽器,然後重新指向,因爲訪問者無論如何都不會看到該消息,這沒有任何意義。

所以,你可以:

  1. 沒有回聲/打印任何東西,但響應陣列存儲在數據庫或會話變量,然後使用一個PHP頭重定向去ok.html;
  2. 使用javascript設置超時,然後在超時後使用window.location重定向。