为什么在启用Javascript时不会忽略<noscript>标记内的所有内容?</noscript>

时间:2012-03-05 08:31:33

标签: php javascript html

正在处理涉及用户可以选择的多个计划的PHP应用程序。在我的“管理计划”页面上,每当用户从菜单中选择任何计划时,都会发送ajax调用,该调用根据数据库值计算计划费用并将其显示给用户。这很好。我唯一的问题是当Javascript被禁用时,一切都搞砸了。不仅计划费用不会显示(很明显),但是当用户点击“提交”按钮时,计划会发生变化(理想情况下,用户应该被带到结帐页面)

无论如何,我尝试在页面顶部放置这样的内容。

<noscript>
Javascript is disabled. Please enable it to continue.
<?php exit(); ?>
</noscript>

因此,当Javascript被禁用时,它会显示一条消息并在那里停止。但是当启用Javascript时,<noscript>标记中的PHP代码也会被取消,并阻止页面运行。

我想知道Javascript何时启用,为什么标签内的所有内容都不会被忽略?

9 个答案:

答案 0 :(得分:7)

PHP在服务器上呈现,而不是在客户端上呈现。 <noscript>仅被浏览器视为或忽略。服务器不知道客户端将使用此标记执行什么操作。 甚至包含PHP的HTML注释也将由页面执行。

答案 1 :(得分:3)

因为页面是在服务器端的第一个位置生成的,然后在第二个位置发送到浏览器。 :)此外,服务器不知道<noscript> - 标签。

答案 2 :(得分:2)

PHP在服务器端执行,而不是在客户端执行。您的服务器对JavaScript一无所知,因为JavaScript是在客户端执行的。

答案 3 :(得分:0)

你不能像这样串起php和js。 php在您的服务器上运行,js在客户端的浏览器上运行,因此始终调用exit()

答案 4 :(得分:0)

noscript 标签仅由浏览器呈现引擎和javascript解释,而不是由服务器端的PHP解释 - 所以这里发生的是服务器在发送之前处理PHP文件它到客户端(服务器,在这个阶段,不关心HTML标签的含义)它命中exit();并停止执行。

然后生成的内容被发送到浏览器并相应地显示。这将是 noscript 标记,文本“Javascript已禁用。请启用它继续”。然后它就会结束PHP生成的内容。

我不确定你的原始情况会发生什么,听起来可能会在 noscript 标签中放置PHP时出现类似的混淆。你能发布一个原始脚本的例子吗?

答案 5 :(得分:0)

无论页面在何处,都会(几乎)始终执行PHP代码。你的问题并不那么简单,因为<script>标签是客户端代码,而PHP是服务器端代码。

服务器端代码在服务器端执行。相反,客户端代码在客户端的机器中执行。因此,PHP并不真正了解<script>标记或客户端是否可以执行脚本。在将结果发送给客户端之前,它只是注意到<?php ... ?>部分并对其进行处理。

答案 6 :(得分:0)

在将页面提供给用户之前,您的<?php exit(); ?>在服务器端执行。 PHP并不关心它是否在<noscript>标记中,因此所有进一步的操作都会在</noscript>标记之前停止。

一种可能的解决方案是在提交按钮中添加disabled="disabled"属性,并使用Javascript删除页面加载时的属性。这样,所有用户都会看到整个表单,但非Javascript用户将无法实际点击该按钮(请记住仍然在<noscript>元素中通知他们。

答案 7 :(得分:0)

因为PHP在服务器上执行,所以在浏览器甚至看到<noscript>标记之前。 Javascript是客户端,PHP是服务器端。

答案 8 :(得分:0)

为什么得到回答。

但是调用php文件的解决方案,我找到了这个帖子。

取决于您需要的背景。为我工作。

<noscript><iframe src="your_php_file.php"></iframe></noscript>

链接:including php in <noscript> tag