外部javascript上的echo-php变量是可能的


echo php variable on external javascript possible?

I(绝对php初学者(在xhtml严格页面顶部得到了一个带有不同变量的脚本:

<?php
$var1="2011,9,31,18,0,0";
[...]
?>

在html正文中,我有一个当前启动的javascript:

<script type="text"/javascript">
dateFuture = new Date(<?php echo $var1; ?>);
[...]
</script>

是否可以将javascript设置为外部,但仍然从索引页顶部提取变量$var1,然后让它在索引页上显示与当前相同的输出?

我发现了一个例子,external.js的开头应该是这样的:

dateFuture = new Date(<?php include("/index.html");echo $var1;?>);

不幸的是,这似乎不起作用。对此有什么可能的解决方案吗?非常感谢您的帮助。提前谢谢。

是。将javascript变量设为全局变量,您就可以在外部js文件中访问它。像这样的

<script type="text/javascript">
  var dateFuture = new Date(<?php echo $var1; ?>);
</script>
<script src="your-external-js-file.js" type="text/javascript"></script>

在您的外部js-file.js中,您可以访问dateFuture。

或者,您可以将外部js文件中的代码封装在一个类中,并将php中的日期作为参数传递给该类的构造函数。

外部JavaScript文件本身可以指向PHP文件——前提是PHP文件输出有效的JavaScript。这样,你可以做如下操作:

myJS.php:

<?php
// Initialize your PHP variable(s) here, or include the PHP script(s) to do so.
$var1="2011,9,31,18,0,0";
...
?>
dateFuture = new Date(<?php echo $var1; ?>);

在您的HTML文件中:

<script type="text/javascript" src="myJS.php"></script>

由于myJS.php的输出纯粹是JavaScript代码,因此文件扩展名对浏览器来说并不重要。与您的PHP代码目前输出纯HTML代码的方式相同,您的浏览器也了解如何解析这些代码。

如果您的目的是将javascript代码移动到外部脚本以实现更好的模块化,那么您可以将其移动到php文件中,然后将php文件引用为javascript。

<script type="text/javascript" src="myscript.php"></script>

myscript.php内部-

<?
Header("content-type: text/javascript");
dateFuture = new Date(<?php echo $var1; ?>);
?>

虽然Jonathan Newmuis和RonakG给出的答案是完全可以接受的,并且会起作用,但这个答案的目的是尽可能接近您现在的设置来回答您的问题。不过,我个人同意罗纳克的回答。

如果您在服务器上使用Apache,请在.htaccess文件中添加以下行:AddType application/x-httpd-php .js。或者,如果您关心性能,您可以将该代码添加到Apache配置中。

该代码的目标本质上是说,PHP应该解析所有以".js"结尾的文件,就好像它们是".PHP">

一样

是。这是可能的。但是,您必须将javascript文件制作成php文件,或者强制Apache或您使用的任何web服务器将javascript作为php运行(完全无害,因为<?php ... ?>之外的所有代码都只是为了输出而编写的(。

my-external-js.phpmy-external-js.js中(无论您选择哪种,尽管我建议前者,因为它需要较少的配置(:

<?php require_once 'file-which-defines-var1.php'; ?>
dateFuture = new Date("<?php print $var1; ?>");

注意:应该始终使用require_once而不是includerequire,这样同一个文件就不会被包含两次,这会导致变量混乱,函数/类冲突。此外,如果脚本无法加载,则requirerequire_once会出现致命错误,而includeinclude_once则不会。