JavaScript的echo window.location.href不起作用

7

我有一个函数,它会输出javascript代码来实现页面跳转。在跳转时,

echo 'window.location.href="'.$url.'";'; 

该功能无法正常工作,只会在屏幕上打印出来。

"window.location.href="./index.php";

我这样使用我的函数:redirect("./index.php");

我的PHP函数如下:

  function redirect($url)
   {    
    if (!headers_sent())
    {    
      header('Location: '.$url);
      exit;
    }
   else
    {      
      echo '<script type="text/javascript">';
      echo 'window.location.href="'.$url.'";';
      echo '</script>';
      echo '<noscript>';
      echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
      echo '</noscript>'; exit;
   }
} 

你的 $url 应该被适当地转义,以防它包含一个“.”。不管怎样,这个页面是一个 HTML 页面吗?浏览器可能会将其解释为纯文本。另外,有点迂腐,HTTP 规范规定 Location 后面应该跟着一个完整的 URI,而不是相对 URL。 - Corbin
这是一个 PHP 页面。我的项目要求我提供相对 URL,因此我别无选择。 - zed
一个 PHP 页面并不意味着它会自动解释为 HTML。 - Corbin
3个回答

4

您的浏览器将响应视为纯文本。

在响应中添加Content-Type: text/html\,并将内容包含在<html></html>标签中。


如果 headers_sent() 返回 true,他就不能发送 Content-Type 头了,不是吗?但 <html> 标签可能会强制浏览器将其视为 HTML。 - Corbin
这个有效。我所做的只是在函数开头添加了一个 echo "<html>",并在函数结尾添加了一个 echo "</html>"。 - zed

3
尝试这种方式。
<?php
$yourURL="http://www.stackoverflow.com";
echo ("<script>location.href='$yourURL'</script>");
?>

无效。它返回纯文本 location.href='./index.php'。 - zed

1

为什么不直接使用输出缓冲,而不必处理JavaScript或元重定向呢?

<?php
// Top of your page
ob_start();

// Code goes here

// Redirect
if ($redirect_is_necessary)
{
    header('Location: '.$url);
    exit;
}

// Rest of page goes here

// Bottom of page
ob_end_flush();
?>

谢谢。这个完美地运作了。不过我希望只有JavaScript重定向。 - zed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接