JavaScript重定向

Cor*_*rey 1 javascript php redirect

这是我的代码,

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/"+<? $name ?>+"/output.txt";
    setTimeout("top.location.href = url",1000);
</script>
Run Code Online (Sandbox Code Playgroud)

$name是一个PHP变量,它具有我尝试重定向到的目录的名称.

不用说,它不起作用.它出什么问题了?我不太了解javascript所以我可能做了一些愚蠢的事情

谢谢

Mat*_*att 6

如果您将PHP与JavaScript混合使用,建议您检查发送到浏览器的输出:右键单击您的网站并单击查看源代码!

JavaScript不关心发送给它的内容是静态HTML,数据库还是PHP生成的内容.如果它在输出中,它将解析它.

如果你这样做,你会发现,你不echo"荷兰国际集团的$name变量.

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/"+<? echo $name ?>+"/output.txt";
    setTimeout("top.location.href = url",1000);
</script>
Run Code Online (Sandbox Code Playgroud)

但那会给你

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/"+ foo +"/output.txt";
    setTimeout("top.location.href = url",1000);
</script>
Run Code Online (Sandbox Code Playgroud)

哪个不是有效的JavaScript,因为foo现在是JS变量,而不是字符串.

所以你应该:

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/<? echo $name ?>/output.txt";
    setTimeout("top.location.href = url",1000);
</script>
Run Code Online (Sandbox Code Playgroud)

此外,不建议将字符串传递给setTimeout(或setInterval); 出于同样的原因反对使用eval(),所以你应该最终得到这样的东西:

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/<? echo $name ?>/output.txt";
    setTimeout(function () {
        top.location.href = url
    },1000);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 既然你还在使用短标签,`<?= ...?>`比`<?echo ...?>`. (3认同)

Mat*_*all 5

传递一个函数,而不是一个字符串setTimeout.

var url = "http://localhost:8888/uploads/<?= $name ?>/output.txt";
setTimeout(function ()
{
    top.location.href = url;
}, 1000);
Run Code Online (Sandbox Code Playgroud)

我假设$namePHP正确填写.