2012-04-11 115 views
5

我有一个函数,它回声JavaScript以导航到不同的页面。导航发生时,回声JavaScript window.location.href不工作

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; 
    } 
} 
+0

你的$网址应该在情况下,它包含了”,反正是页面的html页面?浏览器可能会训释它以纯文本格式正确转义。此外,作为一个有点迂腐,HTTP规范使然 – Corbin 2012-04-11 18:52:32

+0

这是一个php页面,我的项目需要我给出相对URL,因此我没有选择这个 – zed 2012-04-11 19:12:22

+0

一个PHP页面并不意味着它会被自动解释为HTML – Corbin 2012-04-11 19:13:22

回答

4

你的浏览器将响应明文。

预先给您回应Content-Type: text/html\ n加上您的内容包裹在<html></html>标记内。

+0

如果headers_sent()。他不能准确地发送一个Content-Type头可以吗?标签可能会强制浏览器看到它作为HTML虽然。 – Corbin 2012-04-11 19:13:54

+0

这工作。我所做的只是添加回声“”在...处函数的开始处和函数结尾处的回声“”。 – zed 2012-04-11 19:19:36

+0

那么为什么不能upvote或接受呢? – 2012-04-11 19:25:20

0

试试这个方法。

<?php 
$yourURL="http://www.stackoverflow.com"; 
echo ("<script>location.href='$yourURL'</script>"); 
?> 
+0

不起作用。它返回paintext location.href ='。/ index.php' – zed 2012-04-11 19:13:59

+0

@zed,编辑了代码。 – 2013-01-16 18:54:43

0

为什么不直接使用output buffering并没有处理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(); 
?> 
+0

谢谢。这工作非常好。不过,我只希望只有JavaScript重定向。 – zed 2012-04-11 19:18:33