我通过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)
任何想法导致了什么?
答案 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>