在javascript语句中设置PHP值时的奇怪行为

时间:2013-03-31 14:28:11

标签: php javascript variables

我的页面中有以下代码:

<script type="text/javascript">

    if (navigator.userAgent.indexOf('MSIE 8') != -1) {
        <?php $ie8 = 1; ?>
        alert(<?=$ie8?>);
    }

</script>

现在,如果浏览器是IE8,这将正确地输出警报。一切都很好。

但是,如果我在运行之后测试$ie8值,例如:

var_dump($ie8);

我总是以int(1)的值结束浏览器是否为IE8。我在运行函数之前测试了该值,以确保它没有在其他地方设置,但我按预期得到了NULL输出。

所以我的问题是,当它甚至不进入javascript语句时,如何设置为1

3 个答案:

答案 0 :(得分:2)

您正在尝试将Javascript和PHP用作单一语言,当一个是服务器端而另一个是客户端时。

在PHP中,$ie8始终为1。你抛出什么样的HTML或Javascript并不重要,因为Javascript只是由客户端执行,当他们查看页面时,服务器在服务页面时呈现PHP。

如果要基于Javascript函数在PHP中设置值,则需要使用AJAX将客户端的请求发送回服务器,然后PHP可以与数据进行交互。查找有关客户端/服务器端语言和AJAX的更多信息,您可以开始使用。

答案 1 :(得分:1)

当该文件进入PHP时,它并不关心你的javascript逻辑。除非你的&#39; if&#39;是一个PHP而不是JS。

就像一名值班飞行员坐在飞机上作为乘客一样。他的逻辑会影响值班飞行员吗?不。当PHP正在运行时,那时JavaScript是免税的,对PHP Pilot来说无关紧要

答案 2 :(得分:1)

你的结果很明显。在PHP脚本中

<script type="text/javascript">

if (navigator.userAgent.indexOf('MSIE 8') != -1) {
    <?php $ie8 = 1; ?>
    alert(<?=$ie8?>);
}

</script>

当解释为服务器端时,这是浏览器接收的内容

<script type="text/javascript">

if (navigator.userAgent.indexOf('MSIE 8') != -1) {
    alert(1);
}

</script>

您正在javascript块中设置PHP变量。 PHP首先被解释(在浏览器解释javascript之前)..