-3

我的页面中有以下代码:

<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输出。

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

4

3 回答 3

2

您正在尝试将 Javascript 和 PHP 作为单一语言使用,其中一种是服务器端,另一种是客户端。

在 PHP 中,$ie8将永远是1. 你扔给它什么样的 HTML 或 Javascript 无关紧要,因为 Javascript 仅由客户端在他们查看页面时执行,而 PHP 在服务器提供页面时由服务器呈现。

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

于 2013-03-31T14:32:28.763 回答
1

当该文件转到 PHP 时,它并不关心您的 javascript 逻辑。除非您的“if”是 PHP 而不是 JS,否则 php ie8 =1 将始终被执行。

这就像一个下班的飞行员作为乘客坐在飞机上。他的逻辑会影响值班飞行员吗?不,当 PHP 工作时,那时 JavaScript 是下班的,对 PHP Pilot 来说一分钱都没有关系

于 2013-03-31T14:34:49.133 回答
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 之前)..

于 2013-03-31T14:40:17.907 回答