2011-02-23 45 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重定向。