2014-02-06 39 views
-1

该页面不会重定向IE9,但可以在Chrome和IE 11中运行。当用户单击登录按钮而没有完成凭据时,代码应显示文本和错误消息。该页面将粘贴到URL http://xxx.xxx.com/customer.php?action_nm=custlogin,并且不会响应以下代码。重定向PHP代码不适用于IE 9

是否有任何已知的问题,IE9和以下的做法导致重定向不能在PHP中工作?

if(!empty($_POST["email"])){ 
     $_SESSION["Email"] = $_POST["email"]; 

     redirect("customer.php?action_nm=custlogin&action=xpwd"); 
     exit; 
     } 
     else 
     { 

     redirect("customer.php?action_nm=custlogin&action=nocredentials"); 
     exit;   
     } 
    } 

这低于funcition:

function redirect($s){ 
echo '<script language="JavaScript"> 
function redir() { document.location="'.$s.'"; } 
console.log("' . $s . '") 
redir(); 

</script>'; 
} 
+4

向我们展示'redirect()'函数的内容? –

+0

该功能已添加,并且不会占用该文章的格式 –

+0

为什么您使用javascript进行重定向? –

回答

1

我觉得您的重定向功能发生故障,因为你还没有张贴在那里,我张贴我自己的版本。

我用这个函数重定向,到目前为止没有任何问题。

function redirect($url) { 
     try { 
      if (!headers_sent()) { 
       @header('Location: ' . $url); 
       exit; 
      } else 
       throw new Exception(); 
     } catch (Exception $ex) { 
      // Headers already sent!! Redirect via Javascript? 
      echo '<script type="text/javascript">'; 
      echo 'window.location.href="' . $url . '";'; 
      echo '</script>'; 
      // Javascript disabled, redirect via metatags? 
      echo '<noscript>'; 
      echo '<meta http-equiv="refresh" content="0;url=' . $url . '" />'; 
      echo '</noscript>'; 
      exit; 
     } 
    } 
0

为了让你必须把到响应的HTTP标头以下行重定向:

Location: customer.php?action_nm=custlogin&action=xpwd 

现在,有ANYTHING投入你可能不会写头什么都还没有到输出缓冲区,或者你所能做的就是把东西放到HTTP主体中。

换句话说,无论你在该行之前渲染(甚至是空白空间),都会使这种方法无效。

PHP的最佳实践是打开的标签,就在第一个字节:

<?php 

永不关闭的文件中。

现在,在任何其他输出之前,您可以使用header()函数将该行放入HTTP标头中。所以你的页面应该是这样的:

<?php 

header('Location: customer.php?action_nm=custlogin&action=xpwd'); 

这是没有问题的,这是有效的。如果不是,那是因为响应脚本的一部分已经填充了输出缓冲区。这个说法没有办法解决。

+0

再次适用于其他浏览器。我会认为你的答案涉及所有浏览器的权利? –

+0

将这些行复制并粘贴到一个简单的静态页面中,并用IE9打开它。最后一件事可能会影响到你的浏览器。如果可以的话,尝试从另一台机器上用IE9打开那个简单的静态页面。 – pid

相关问题