Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 重复的Java脚本正在加载ajax_Javascript_Jquery_Ajax_Duplicates_Multiple Instances - Fatal编程技术网

Javascript 重复的Java脚本正在加载ajax

Javascript 重复的Java脚本正在加载ajax,javascript,jquery,ajax,duplicates,multiple-instances,Javascript,Jquery,Ajax,Duplicates,Multiple Instances,我正在为我最后一年的项目开发一个基于web的文档管理。用户只与一个页面交互,当用户单击相应的选项卡(用于导航的选项卡)时,将使用AJAX调用相应的页面 由于有多个用户级别(管理员、经理等),我将Java脚本放到了相应的网页中 当用户请求时,除了某些功能被多次触发的情况外,用户请求一切都能正常工作。我发现了问题。每次用户单击某个选项卡时,它都会加载与新实例相同的脚本,并且在我调用函数时会触发这两个脚本 加载内容我累了 .load和$.ajax()其中没有一个解决了这个问题 当时我试图将所有内容都

我正在为我最后一年的项目开发一个基于web的文档管理。用户只与一个页面交互,当用户单击相应的选项卡(用于导航的选项卡)时,将使用AJAX调用相应的页面

由于有多个用户级别(管理员、经理等),我将Java脚本放到了相应的网页中

当用户请求时,除了某些功能被多次触发的情况外,用户请求一切都能正常工作。我发现了问题。每次用户单击某个选项卡时,它都会加载与新实例相同的脚本,并且在我调用函数时会触发这两个脚本

加载内容我累了

.load
$.ajax()其中没有一个解决了这个问题

当时我试图将所有内容都放到主页上,但我的jQueryUI不起作用。我累了

$(document).load('click', $('#tab_root li'), function(){});
同样的问题仍然存在

有人能帮我解决这个问题吗

--编辑--

    $(function){
        $(document).on('click','#tabs',function(e){
            getAjax($(this))
        });

    }

    //method to load via AJAX
    function getAjax(lst){
        var cont = $(lst).text();
        $.ajax({
            url:'../MainPageAjaxSupport',
            data: {
                "cont":cont
            },
            error: function(request, status, error){
                if(status==404){
                    $('#ajax_body').html("The requested page is not found. Please try again shortly");      
                }
            },
            success: function(data){
                $('#ajax_body').html(data);
            },

        });


    }

在执行JavaScript之后,您不能通过卸载文件或删除脚本元素来撤消JavaScript

最好的解决方案可能是在ajax数据中包含的每个JavaScript文件中设置一个变量,并从ajax数据中的在线内联JavaScript中包含这些变量,以及以下条件:

<script>
    if(!tab1Var) $.getScript("filename");
<script>
或者,您可以为主html中的每个选项卡初始化全局变量(eventsBound1=false):

$(function){
    if(!eventsBound1){
        $('#tabs').on('click', function(e){
            getAjax($(this));
        });
        eventsBound1 = true;
    }
}
tabs click event只是一个示例,每次在要重新加载的脚本中绑定事件时都必须执行此操作

如果所有事件都绑定到ajax_body中的内容,那么您可以尝试的最后一件事是:

success: function(data){
    $('#ajax_body').empty();
    $('#ajax_body').html(data);
},

您在“文档”上绑定了一个事件,因此getAjax()只替换“#ajax_body”而不是“文档”


这意味着旧事件仍然附加到“文档”中,您只需使用
$(document).off('click')取消绑定事件即可或将“文档”更改为其他元素。

尝试使用
bind
而不是单击,这样您可以
解除绑定事件。或者,如果您是动态创建元素,请使用我尝试过的
on
on。on但不起作用。相同的多次出现。绑定和取消绑定如何。另外,在这里或JSFIDLE上发布代码可能会帮助我们@哈沙,我刚才绑定了,但问题仍然存在。代码在哪里??!!它不起作用。如果我能够删除以前在getAjax之前加载的旧javascript文件($(this));函数触发器,然后我希望问题会得到纠正。(检查问题中的图片)@Sumer是传递给您发布的ajax调用的数据中的JavaScript吗?然后尝试我发布的第三个解决方案。很抱歉,它再次失败。当然它$('#ajax_body').empty()工作正常,但问题是加载的javascript仍保留在浏览器缓存中。因此,当我第二次请求相同的选项卡而不是替换旧的javascript时,它会生成一个新的javascript。您的javascript是否在单独的文件中?@Sumer那么每次绑定选项卡中的事件时,您都必须应用上述前两个解决方案中的一个。我假设触发的多个事件与您要替换的部件之外的事物绑定,否则第三个解决方案应该可以工作。如果使用第二种解决方案,请在主html中为每个选项卡定义不同的全局变量。执行JavaScript后,无法卸载它。
success: function(data){
    $('#ajax_body').empty();
    $('#ajax_body').html(data);
},