我有一个很大的验证JS脚本。我想把这个脚本放在外部JS。
一切正常,但在JS中我使用cookie来处理我的用户表单联结。
此外,我在这个JS中使用PHP。
如果在HTML中的JS,那么工作。但是,如果我把它放到外部,那么没有。
例如:
外部JS:
$(document).ready(function() {
var test = $.cookie('tet');
$.cookie('tet','8');
<?php
if (isset($_SESSION['main_check_a'])) {
echo "$.cookie('tet','1');";
?>
}}
}
如何将此PHP代码传递给外部JS?
答案 0 :(得分:5)
你需要
让PHP解析JS文件,命名为filename.js.php
或更改服务器的PHP配置以解析.js文件。但这不是最佳选择,因为将为每个脚本请求启动资源密集型PHP实例。
或者,更好的IMO,在嵌入文档中的<script>
标记中进行必要的检查,并将结果存储在嵌入式外部脚本可以查询的JS变量中。这样,您的脚本文件可以保持静态。
在你的情况下,这意味着这样的事情。在主文件中:
<script>
<?php
echo "main_check_a = ";
echo (isset($_SESSION['main_check_a']) ? "true" : "false");
?>
</script>
.... now, include external JS files ....
这将为您提供可在外部脚本中使用的JavaScript变量main_check_a
。
答案 1 :(得分:3)
您必须设置服务器以解析此文件。 通常你会给它扩展* .php
为避免特殊问题,您应在此脚本中发送正确的标头:
header('Content-Type:text/javascript');
如果您无法更改扩展名,则可以例如使用Apache的AddType-Directive来设置服务器来解析* .js-Files(但我不推荐它)
答案 2 :(得分:2)
如果您正在尝试使用php / js代码生成,请立即停止。这就是我称之为“高风险”的做法,因为它模糊了业务和视图逻辑之间的界限。此外,您最终难以维护代码汤和浏览器缓存问题。
应该始终避免代码生成,除非有充分的理由,我不会将cookie处理称为一个很好的理由。经过深思熟虑后,您可以提出更易于维护的解决方案。
按照'我可以'和'我可以'的方式处理业务逻辑cookie。换一种说法;如果有理由用PHP编写cookie,请将其保存在PHP中,并且只能使用JavaScript读取cookie。
此外,您希望JavaScript文件保留为静态文件,或者由于浏览器缓存而无法执行您希望执行的操作,并且您必须使用更多黑客来阻止浏览器缓存文件。
最后,一直以正确的方式完成工作的工作量减少了。
答案 3 :(得分:2)
请注意,访问者每次访问您的网站时都必须下载生成的JavaScript,因为浏览器不会对其进行缓存。
如果我是你,我会考虑重新设计整个事情,这样你就不需要PHP生成的JavaScript了。
答案 4 :(得分:1)
配置PHP以解析.js
个文件,或命名外部JavaScript文件/yourjavascriptfile.js.php