1
 $('#tip2').qtip({
   content: {
     text: '<?php echo "I do work."?>'
  },

在这种情况下,我使用的是 jquery 插件,但这对于我相信的问题无关紧要。

我以为我必须通过 json 调用(或其他 ajax 调用方法),因为 php 先运行,然后才运行 javascript,但是,我实际上测试了这段代码,它实际上显示了文本。

谁能解释一下,在什么情况下我们不应该在javascript中使用php。这是其中之一吗?如果是这样,为什么?

我显然没有得到一些客户端和服务器端的工作流程......请原谅我对这些问题的新手。

抱歉,如果这是一个不便的问题。

更新

请注意,我问的是事实。不是意见。有人说:“你不应该那样做。”

我在问:“哪些事实(而不是观点)支持这种说法?”

4

3 回答 3

3

出于缓存原因,将大部分(如果不是全部)JavaScript 外部化到另一个静态文件可能是明智的。

可以让 PHP 文件生成 JavaScript,但作为所有动态内容,它也不能缓存(虽然您可以设置缓存标头,但对生成的内容的更改不会立即发生,因此您将被迫找到内容准确性和带宽节省之间的折衷方案)。

我会将您的示例外部化:

$('#tip2').qtip({
    content: {
     text: my_var
  },

<script>然后在链接静态文件之前在动态文件中创建以下块:

my_var = '<?php echo 'I do work'; ?>';

这样,绝大多数 JavaScript 将是静态的,并且符合 Max-Age 缓存的条件。

为了给你提供一个真实的例子,我最近实现了一个纯 JS 绘图库,它将离散数据绘制到画布上。要绘制的数据由 CGI 提供(我没有使用 PHP,但应该没关系),所以我使用这种方法在动态文件中声明了一个值数组,同时将实际处理和绘制代码外部化. 它工作得很好,由于缓存很好,使用了最小的带宽,并且仍然非常易于维护。

与其他一些答案不同,我不会说您应该避免将服务器端代码与客户端代码混合在一起。地狱,HTML是您在服务器端生成的客户端代码。根据您的需要,混合 JS 和 CGI​​ 可以扩展您的可能性,并应用我的缓存技巧,没有真正的缺点。

于 2013-08-06T15:11:01.587 回答
1

php 文件由 web 服务器解释并转换为纯 html 文件。然后将该 html 文件传递​​给客户端的浏览器,该浏览器显示它。

在您的情况下,php echo 在 html 页面中呈现为字符串。

请记住,如果您执行示例中的操作,则呈现给页面的值是在页面由 php 呈现时存在的值。

于 2013-08-06T15:13:32.900 回答
-3

你应该尽量不要使用它。但是,当您确实需要将 PHP 代码(例如 $_SESSION 数组)中的值传递到 jQuery/JavaScript 函数时,可能会有一些非常罕见的情况。在这种情况下,如果您没有任何其他选择,那么您可以像上面那样传递值。但在所有其他情况下,尽量不要这样做,因为这不是一个好习惯。当您像这样组合 2 种不同的语言时,可能会出现应用程序/网页出现不可预知行为的情况。

于 2013-08-06T15:12:20.053 回答