函数每次调用时都会触发额外的时间 - jQuery / AJAX

时间:2017-08-26 15:04:16

标签: javascript jquery ajax

范围

我们有一个功能。在它内部是一个ajax请求:

function search(){
 $.ajax({
    url: "url",
    dataType: "text",
    success: function(result) {
        var filter = $(result).find('#myDiv');
        // populate a hidden div with this information
        $("#ladderInformation").html(filter);
    }
 });
}

一旦完成,我们迭代初始ajax请求的结果,并为每个请求运行一个新的ajax请求:

// yes, this is attached to the above, it's not outside of the first ajax call

.done(function(){
    // for every team, we're going to run this ajax call
    $('.team').each(function(i){
        $.ajax({
            url: "(we make use of $(this).text() here)",
            dataType: "text",
            success: function(teamdata){
                $('#teamListing').append($(teamdata).find('#team-sheet'));    
                // for every time it runs, we'll append a div to the wrapper. 
                $('.wrapper').append('<div class="teamInfo" id="'+ Team [i] + '"></div>');
            }
        });
    });
});

这一切都很完美。

接下来,我操纵收到的元素:

$(document).ajaxStop(function(){
    //this function is irrelevant to the issue
    configureTeams();
});

以上所有内容都包含在第一个提及的函数search();中。我们称之为

$(document).ready(function(){
    search();
    $('select').on('change', function(){
        search();
    });
});

在第一页加载时,它按预期执行所有操作。

问题

当多次触发select侦听器时,每次使用它时,应用程序都会大幅减慢速度。当我尝试添加&#34;自动刷新&#34;结果(通过将setTimeout(function(){ search() }, 5000);添加到$(document).ajaxStop(){}函数的末尾来实现)。

每次调用search()时,都会触发一次额外的时间。因此,举例来说,如果你已经改变选择6次(或者让应用程序继续运行并自动刷新6次),则会激活6次以匹配此项,并且不可避免地会中断。

尝试修复

如果我在console.log()函数中$(document).ajaxStop(),则会在每次调用search()时触发额外的时间。这可以通过将其更改为$(document).one('ajaxStop', function(){})来解决,但这并不能解决整个问题,因为所有这一切都会阻止配置多次触发。

我得到了在search()开头清空信息的div,所以没有与相同数据或类似的数据发生冲突,我尝试在队列中管理ajax请求,我有尝试了多种检测所有ajax请求在继续之前完成的方法,我尝试限制$.each()函数,因此它不会超过所需的迭代次数,但无济于事。

TL; DR

我想要完成的是,当我多次运行一个函数时,我们每次都完全重新开始。似乎它每次被调用时都会记录。是否有清除内存,AJAX队列或类似的解决方案?

如果更有帮助,我可以提供完整的代码。

由于

0 个答案:

没有答案