导入javascript文件或对通过ajax加载的项目应用javascript函数
这就是我正在努力解决的问题——我已经在我的网站上实现了一个无限滚动的评论,但是每个评论都需要很多javascript函数来进行样式设置、交互等(而且每个评论都可以在引导模式中打开)。用文章打开页面并以常规方式获取前几条评论是可以的,但当用户开始向下滚动并获取新的评论时,javascript正在工作。我意识到这是因为我的ajax.tpl文件中没有包含javascript文件。 以下是我的文件结构以及如何工作的示例: (我使用smarty作为模板,但我认为它现在没有太大区别,它只允许将逻辑代码与html分开。) 我有导入javascript文件或对通过ajax加载的项目应用javascript函数,javascript,php,jquery,ajax,smarty,Javascript,Php,Jquery,Ajax,Smarty,这就是我正在努力解决的问题——我已经在我的网站上实现了一个无限滚动的评论,但是每个评论都需要很多javascript函数来进行样式设置、交互等(而且每个评论都可以在引导模式中打开)。用文章打开页面并以常规方式获取前几条评论是可以的,但当用户开始向下滚动并获取新的评论时,javascript正在工作。我意识到这是因为我的ajax.tpl文件中没有包含javascript文件。 以下是我的文件结构以及如何工作的示例: (我使用smarty作为模板,但我认为它现在没有太大区别,它只允许将逻辑代码与ht
article.tpl
可以显示我所有的评论,还有ajax.php
可以从数据库中检索新的评论,还有ajax.tpl
可以用html代码在article.tpl
中显示评论。下面是我用来触发加载新注释的JS函数:
//Infinite scroll
flag = true;
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()){
first = $('#first').val();
limit = $('#limit').val();
idt = $('#idt').val();
no_data = true;
if(flag && no_data){
flag = false;
$('#loader').show();
$.ajax({
url : 'ajax.php',
method: 'POST',
dataType: 'html',
data: {
start : first,
limit : limit,
idt : idt
},
success: function( data ) {
flag = true;
$('#loader').hide();
if(data !=''){
first = parseInt($('#first').val());
limit = parseInt($('#limit').val());
$('#first').val( first+limit );
$('#timeline-container').append( data );
}else{
alert('No more data to show');
no_data = false;
}
},
error: function( data ){
flag = true;
$('#loader').hide();
no_data = false;
alert('Something went wrong, Please contact admin');
}
});
}
}
});
我所有的js文件都包含在每个模板文件的底部,我试图在
ajax.tpl
中包含js文件,但由于包含的多个,这导致了很多错误。我会非常乐意接受任何建议或帮助!谢谢大家 第一步是将它们构建为两个独立的概念。如果你的想法是要用PHP构建一些HTML,然后你要编写一些JS来处理这个问题,那么你会想出非常不同的解决方案,而不是如果你想在一个来自服务器的页面上,不管它是在Laravel、Express、ASP.net等中完成的,但是现在你在这个页面上,你必须在自己的盒子里工作。基本上,学会将客户机代码视为自己的程序和服务,而不是作为注入页面的助手脚本,这样伤害会更小。您应该解除滚动处理程序函数的影响,这意味着只有在用户停止滚动一段时间后,它才会触发一次:()否则,处理程序将每秒执行数十次或数百次。感谢debounce提示,但据我所知,它现在对我的问题没有帮助?无论如何,我要实现一段代码,在没有更多注释时停止调用ajax php文件,如果这就是debounce
的意义所在的话……你提到过你的JS在每个TPL的末尾吗?它不会导致同一页中相同代码的重复吗?你能发布.tpl和.php文件的内容吗?不,你是对的,这只是一个评论。在看不到实际代码的情况下,很难理解发生了什么。动态加载的JS具体做什么?每个请求都不同吗?如果不是,那么为什么不加载所需的脚本一次呢?