Lee*_*loo 4 javascript php jquery
我的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>
Run Code Online (Sandbox Code Playgroud)
我是最佳实践的忠实粉丝,所以我想将我的jQuery移动到外部JS文件中.
我怎么能实现这样的壮举?
有小费吗?我还是jQuery和PHP的新手.
谢谢!
:)
Tad*_*eck 12
我的解决方案结合了几种技术,其中一些已经在这个问题的答案中提到过.
首先:是的,你应该将你的JS与PHP分开.您可以将其放在单独的文件中,但是您需要对当前代码进行一些更改.不要动态生成JS文件 - 它实际上杀死了将JS代码分离到单独文件(你不能缓存它等)的优点.
接下来,将您的公共变量作为全局变量存储在HTML文件的标题中(尽管还有其他选择,您实际上没有太多选择),最好分组在一个对象中:
var Globals = <?php echo json_encode(array(
'active_user_id' => $active_user->id,
'token' => $token,
'hash' => $hash,
)); ?>;
Run Code Online (Sandbox Code Playgroud)
或者,您可以将所有这些作为参数传递给您将调用的函数,但我假设您也在脚本的其他位置使用它们.
data-属性中的容器相关数据然后使用data-属性存储与容器关联的实际数据.您不需要post1/ post2/ post3-like类并为它们分离事件处理程序:
<div data-post-id="10">here is something</div>
Run Code Online (Sandbox Code Playgroud)
而不是例如:
<div class="post10">here is something</div>
Run Code Online (Sandbox Code Playgroud)
data-从外部JS文件中读取全局变量和属性然后你的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;
});
});
Run Code Online (Sandbox Code Playgroud)
这应该足够了(虽然我没有测试它).