PHP回应的Javascript不运行

时间:2011-12-02 17:11:43

标签: php javascript redirect echo

我通过php动态回应javascript有一点问题。这是我的代码

$url = "http://www.newsite.com";

echo "
    <html>
    <head>
    <title>Redirecting</title>
    </head>
    <body onload='redirect()'>
        Not Logged In

        <script type = 'text/javascript'>
    function redirect() {
        window.location=".$url."
        }
    </script>
    </body>
    </html>
    ";

我的javascript控制台告诉我“找不到redirect()”(Uncaught ReferenceError:redirect not defined)

任何想法导致了什么?

5 个答案:

答案 0 :(得分:5)

完全删除基于客户端的重定向。使用:

header("HTTP/1.0 302 Moved Temporarily"); 
header("Location: $url");

答案 1 :(得分:4)

你错过了一个引号。这将解决您的问题:

function redirect() {
    window.location='".$url."';
}

目前,您的页面呈现如下(请注意缺少的引号/语法错误):

function redirect() {
    window.location=http://www.newsite.com;
}

答案 2 :(得分:2)

代码有问题。

window.location=".$url." 

应该是

window.location=\"".$url."\"

答案 3 :(得分:1)

您应该将该功能放在标题区域中,并将其包裹起来。

echo "
    <html>
    <head>
    <title>Redirecting</title>
    <script type = 'text/javascript'>
    function redirect() {
        window.location='".$url."."'
        }
    </script>
    </head>
    <body onload='redirect()'>
        Not Logged In


    </body>
    </html>
    ";

答案 4 :(得分:0)

正如@Tomalak所说,你不应该使用javascript来解决这个问题。使用服务器重定向。

然而,将php数据导入javascript有一个更普遍的问题。我会在这里解决这个问题。

您需要为javascript和html正确转义$url参数。未定义redirect(),因为其中存在语法错误。

每当您需要将内联的javascript数据传递给html时,请使用以下模式。这是最清楚,最安全的方法。

<?php
// 1. put all the data you want into a single object
$data = compact($url);
// $data === array('url'=>'http://example.org')

// 2. Convert that object to json
$jsdata = json_encode($url);

// 3. html-escape it for inclusion in a script tag
$escjsdata = htmlspecialchars($jsdata, ENT_NOQUOTES, 'utf-8');
// change utf-8 to whatever encoding you are using in your html.'
// I hope for your sanity you are using utf-8!

// 4. Now assign $escjsdata to a js variable in your html:

?>
<html>
<head>
<title>Redirecting</title>
</head>
<body onload='redirect()'>
    Not Logged In

    <script type = 'text/javascript'>
    function redirect() {
        var data = <?php echo $escjsdata ?>;

        window.location=data.url;
    }
</script>
</body>
</html>