在外部JS文件中包含PHP变量
Including PHP variables in an external JS file?
我的web应用程序中有几行jQuery。这段代码目前是内联的,因为它接受了几个PHP变量。
<script type="text/javascript">
$(document).ready(function(){
$('.post<?php echo $post->id; ?>').click(function() {
$.ajax({
type: 'POST',
url: 'http://domain.com/ajax/add_love',
data: {
post_id: <?php echo $post->id; ?>,
user_id: <?php echo $active_user->id; ?>,
<?php echo $token; ?>: '<?php echo $hash; ?>'
},
dataType: 'json',
success: function(response) {
$('.post<?php echo $post->id; ?>').html(response.total_loves).toggleClass('loved');
}
});
return false;
});
});
</script>
不过,我非常喜欢最佳实践,所以我想将jQuery移到一个外部JS文件中。
我怎么能取得这样的成就?
有什么建议吗?我对jQuery和PHP还是比较陌生的。
谢谢!
:)
我的解决方案结合了几种技术,其中一些技术已经在这个问题的答案中提到了。
是,将PHP与JS分离
首先:是的,你应该把JS和PHP分开。您可以将它放在一个单独的文件中,但您需要对当前代码进行一些更改。不要动态生成JS文件——这实际上扼杀了将JS代码分离成单独文件的优势(你不能缓存它等)
作为全局变量/函数自变量的公共变量
接下来,将您的通用变量作为全局变量存储在HTML文件的头中(尽管还有其他选择,但您实际上没有太多选择),最好分组在一个对象中:
var Globals = <?php echo json_encode(array(
'active_user_id' => $active_user->id,
'token' => $token,
'hash' => $hash,
)); ?>;
或者,您可以将所有这些参数作为参数传递给将要调用的函数,但我假设您也在脚本的其他地方使用它们。
存储在data-
属性中的容器相关数据
然后使用data-
属性来存储与容器相关联的真实数据。您将不需要类似post1
/post2
/post3
的类和单独的事件处理程序:
<div data-post-id="10">here is something</div>
而不是例如:
<div class="post10">here is something</div>
如何从外部JS文件中读取全局变量和data-
属性
然后你的JavaScript可能看起来像:
$(document).ready(function(){
$('[data-post-id]').click(function() {
var el = $(this);
var data = {
'post_id': el.data('post-id'),
'user_id': Globals.active_user_id
};
data[Globals.token] = Globals.hash;
$.ajax({
'type': 'POST',
'url': 'http://domain.com/ajax/add_love',
'data': data,
'dataType': 'json',
'success': function(response) {
el.html(response.total_loves).toggleClass('loved');
}
});
return false;
});
});
这应该足够了(尽管我没有测试)。
您可以始终使用PHP:中的参数调用函数
somefile.js:
function func(params) {
//params is now from PHP
//params.foo == "bar"
}
somefile.php:
<?php
$params = array('foo' => 'bar');
?>
<script type="text/javascript">
$(function() {
func(<?php echo json_encode($params); ?>);
});
</script>
我倾向于采用这种方法,因为它避免了全局变量,同时允许轻松传输变量。
我喜欢使用json_encode,因为任何有效的json都是有效的JS,这意味着你不必担心转义'或"如果你使用字符串并在其中回声PHP。
我通常这样做的方式是在页面中使用一些变量,然后所包含的JavaScript访问这些变量。
在您的主页中:
var post_id=<?php echo $post->id; ?>;
然后在您包含的JS文件中:
data: { post_id: post_id,
如果仍然希望包含PHP变量,则不能将其放入外部.js文件中。但是,您可以将代码放入一个单独的PHP文件中,该文件可以生成有效的Javascript输出(包括设置为"text/Javascript"的头中的内容类型!)。
在你的第一个PHP文件中,你可以参考第二个用生成Javascript代码的PHP文件
<script src="path/to/generateJS.php" type="text/javascript"></script>
我不知道是否有办法。但是,如果您设法在外部js文件中包含变量,这意味着这些文件将不得不作为呈现这些变量的php脚本来处理,而不仅仅是将它们呈现为静态文件。这将对性能产生不利影响。
仍然可以使用外部JS文件的一种方法是声明一个函数并从内联javascript向其传递参数。你的代码看起来像:
<script>
bindPost(<?php echo $post->id; ?>,<?php echo $active_user->id; ?>,'<?php echo $hash; ?>');
</script>
其中bindPost
是在外部JS文件中声明的,并且可以很好地处理参数。
在不增加更多复杂性的情况下,最简单的方法是让服务器将Javascript文件视为PHP文件,这样您就可以在该文件中定义PHP变量,然后像在问题代码中所做的那样对其进行回显。
在apache上,这意味着创建一个.htaccess文件并添加以下行:
AddType x-httpd-php .js
(注意,这将把所有的javascript文件都作为PHP处理。如果你只想把一些javascript文件作为PHP处理,你需要制定一个更窄的.htaccess规则。)
- 根据屏幕分辨率包含 php 文件
- 有没有其他方法可以在远程服务器上包含php文件?除了<?php include()>
- 基于浏览器特性动态包含PHP
- 在js文件中包含php
- 是否可以在js脚本中包含php文件并访问该php文件的功能
- 我们可以在茉莉花中包含 php 文件并使用它们的功能吗 .
- 使用包含 php 和 ifs 的 JavaScript 生成 HTML
- 当我包含 php 脚本时,PHP/javascript 脚本停止工作
- json对象包含php DateTime,如何转换为漂亮的日期字符串
- 在Laravel中包含php文件的位置以及如何使用javascript调用php文件中的特定函数
- 在PHP页面中包含许多javascript函数(其中包含PHP)的最有效方法是什么?
- 我可以在我的JavaScript中包含php sql更新吗?
- 在javascript中包含php文件
- 在外部JS文件中包含PHP变量
- 如何在JavaScript代码中包含PHP文件
- 如何包含php文件取决于用户选择的内容
- 无法在信息窗口GoogleMap上显示包含JavaScript变量中的文本或字符串的数据,查询中包含php文本
- 是否可以在javascript函数中包含php代码
- PHP&JavaScript|在JavaScript生成的表单中包含PHP数学Captcha
- 尝试打开js或jquery窗口以包含php脚本