Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入javascript文件或对通过ajax加载的项目应用javascript函数_Javascript_Php_Jquery_Ajax_Smarty - Fatal编程技术网

导入javascript文件或对通过ajax加载的项目应用javascript函数

导入javascript文件或对通过ajax加载的项目应用javascript函数,javascript,php,jquery,ajax,smarty,Javascript,Php,Jquery,Ajax,Smarty,这就是我正在努力解决的问题——我已经在我的网站上实现了一个无限滚动的评论,但是每个评论都需要很多javascript函数来进行样式设置、交互等(而且每个评论都可以在引导模式中打开)。用文章打开页面并以常规方式获取前几条评论是可以的,但当用户开始向下滚动并获取新的评论时,javascript正在工作。我意识到这是因为我的ajax.tpl文件中没有包含javascript文件。 以下是我的文件结构以及如何工作的示例: (我使用smarty作为模板,但我认为它现在没有太大区别,它只允许将逻辑代码与ht

这就是我正在努力解决的问题——我已经在我的网站上实现了一个无限滚动的评论,但是每个评论都需要很多javascript函数来进行样式设置、交互等(而且每个评论都可以在引导模式中打开)。用文章打开页面并以常规方式获取前几条评论是可以的,但当用户开始向下滚动并获取新的评论时,javascript正在工作。我意识到这是因为我的ajax.tpl文件中没有包含javascript文件。 以下是我的文件结构以及如何工作的示例: (我使用smarty作为模板,但我认为它现在没有太大区别,它只允许将逻辑代码与html分开。)

我有
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具体做什么?每个请求都不同吗?如果不是,那么为什么不加载所需的脚本一次呢?