如何在PHP中包含js文件?

时间:2010-11-21 14:30:38

标签: php javascript

我在php中有一个js文件有问题。 如果我这样包括它:

?> <script type="text/javascript" href="file.js"></script> <?php

该文件未包含在内,我收到一个错误,即未定义该功能。

当我这样尝试时:

<script type="text/javascript">
document.write('<script type="text/javascript" src="datetimepicker_css.js"></script>');
</script>

document.write函数中的第一个标记关闭<script type="text/javascript">

这样做的正确方法是什么?

感谢, 塞巴斯蒂安

9 个答案:

答案 0 :(得分:45)

PHP与您正在做的事情完全无关。生成的HTML非常重要。

在您的情况下,您缺少src属性。使用

 <script type="text/javascript" src="file.js"></script>

答案 1 :(得分:2)

在您的示例中,您使用href属性来说明可以找到JavaScript文件的位置。这应该是src属性:

?> <script type="text/javascript" src="file.js"></script> <?php

有关详细信息,请参阅w3schools

答案 2 :(得分:2)

Pekka has the correct answer(因此我将此答案作为社区Wiki):使用src而不是href来指定文件。

关于:

  

当我这样尝试时:

<script type="text/javascript">
    document.write('<script type="text/javascript" src="datetimepicker_css.js"></script>');
</script>
     

document.write函数中的第一个标记关闭   你这样做的正确方法是什么?

您不希望或需要document.write,但万一 需要将</script>字符放在script标记中出于某种其他原因:您可以通过确保HTML解析器(不理解JavaScript)看不到文字</script>来实现。有几种方法可以做到这一点。一种方法是逃避/,即使您不需要:

<script type='text/javascript'>
alert("<\/script>"); // Works, HTML parser doesn't see this as a closing script tag
//      ^--- note the seemingly-unnecessary backslash
</script>

或者如果你感觉更偏执:

<script type='text/javascript'>
alert("</scr" + "ipt>"); // Works, HTML parser doesn't see this as a closing script tag
</script>

...因为在每种情况下,JavaScript都会将字符串视为</script>,但HTML解析器不会。

答案 3 :(得分:2)

我找到了一个我喜欢的不同解决方案:

<script>
    <?php require_once("/path/to/file.js");?>
</script>

也以同样的方式处理样式标签和 .css 文件。

答案 4 :(得分:1)

我从来不喜欢关闭PHP块以将内容输出到浏览器,我更喜欢将输出捕获,所以如果在我的逻辑中的某些时候我决定我想要改变我的输出(在输出已经输出之后)我可以删除当前的缓冲区。

但正如Pekka所说,你在使用javascript时出现问题的主要原因是你使用href来指定js文件的位置,你应该使用src

如果你有一个函数文件,里面有你的函数,那么添加如下内容:

function js_link($src)
{
    if(file_exists("my/html/root/" . $src))
    {
        //we know it will exists within the HTTP Context
        return sprintf("<script type=\"text/javascript\" src=\"%s\"></script>",$src);
    }
    return "<!-- Unable to load " . $src . "-->";
}

代码中的n,无需使用?>关闭块,您只需使用:

echo js_link("jquery/1.6/main.js");

答案 5 :(得分:0)

在这方面,PHP的HTML输出和普通的HTML页面没有区别。

你绝对不应该做document.write。您的JS与您的PHP无关,因此在第一个示例中必定存在其他一些错误(如文件路径)。

另外,在脚本中使用</script>时会遇到问题。在解析JS之前,HTML解析器会在扫描JS时看到关闭脚本标记,并且会变得混乱。由于这个原因,你会看到人们在做'<'+'/script'这样的事情。

编辑:

作为T.J. Crowder指出,实际上你需要在'href标签中将src更改为<script>。哎呀,实际上Pekka在答案中指出了这一点,所以实际上在这里添加它是完全多余的。

答案 6 :(得分:0)

从页面到file.js的路径更有可能是错误的。 只要你查看页面和查看源,你看到标签,它的工作,现在是时候调试你的路径是否太相对,也许你需要一个/在它前面。

答案 7 :(得分:-1)

如果您真的希望使用PHP,可以使用

include "file.php";

require "file.php";

然后在file.php中,使用heredoc&amp;回应它。

file.php contents:
$some_js_code <<<_code
function myFunction()
{
   Alert("Some JS code would go here.");
}
_code;

在PHP文件的顶部,使用include或require引入文件 然后在头部(或身体部分)回声

<?php
require "file.php";
?>
<html>
<head>
<?php
echo $some_js_code;
?>
</script>
</head>
<body>
</body>
</html>

不同的方式,但它的工作原理。只是我的$ .02 ......

答案 8 :(得分:-1)

我试过这个,我有类似

的东西

script type="text/javascript" src="createDiv.php?id=" script

AND createDiv.php 我有

document getElementbyid(imgslide).appendchild(imgslide5).innerHTML = 'php echo $helloworld; ';

我得到了supermad,因为在 createDiv.php 开头的php我将$helloWorld php变量格式化为从html页面剪切和粘贴

但它不会起作用因为空白是否有人会告诉任何人有关空白问题的原因我的真正的php空白仍然有效但不是这个。