Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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:函数调用一次,但执行两次_Javascript_Jquery - Fatal编程技术网

Javascript:函数调用一次,但执行两次

Javascript:函数调用一次,但执行两次,javascript,jquery,Javascript,Jquery,我正在尝试编写一个脚本,它使ajax请求从服务器获取更多提要。有点像分页 这里的问题是siteheloper.loadMoreFeeds()函数在单击“更多”链接时调用一次。但是函数的代码执行两次。我不明白为什么会发生这种事。 没有循环或递归调用 我在某些方面尝试过“提醒”,以验证函数只被调用一次;这是真的,但它的代码执行了两次 提前谢谢 //SiteHelper = {....} has lots of code already SiteHelper.loadMoreFeeds = fun

我正在尝试编写一个脚本,它使ajax请求从服务器获取更多提要。有点像分页

这里的问题是
siteheloper.loadMoreFeeds()
函数在单击“更多”链接时调用一次。但是函数的代码执行两次。我不明白为什么会发生这种事。 没有循环或递归调用

我在某些方面尝试过“提醒”,以验证函数只被调用一次;这是真的,但它的代码执行了两次

提前谢谢

//SiteHelper = {....}  has lots of code already

SiteHelper.loadMoreFeeds = function (loaderUri, limit) {
    $(".feeds-loadmore .more").hide();
    $('.feeds-loadmore').find('.loading-anim').fadeIn();

    alert('loadMoreFeeds called');

    $.ajax({
        type: "GET",
        url: SiteHelper.baseUrl(loaderUri),
        data: { 'limit': limit },
        cache: false,
        success: function(result) {
            $('.feeds-loadmore').remove();
            $("#content").append('<!-- [data] : ' + JSON.stringify(limit) + ' -->');
            $("#content").append(result);
            $("#content").append('<!-- //[data] -->');
            alert('ajax success');
        }
    });
};


$(function() {
    $('#content').on('click', '.feeds-loadmore a.more', function(e) {
        var loaderUri = decodeURIComponent( $(this).attr('data-loader') );
        var limitData = $(this).attr('data-limit');

        if(!loaderUri)
            return;

        alert('clicked');

        SiteHelper.loadMoreFeeds( loaderUri, JSON.parse(limitData) ); 

        e.preventDefault();
    })
});
//siteheloper={….}已经有很多代码了
SiteHelper.loadMoreFeeds=函数(loaderUri,限制){
$(“.feeds loadmore.more”).hide();
$('.feeds loadmore').find('.loading anim').fadeIn();
警报(“调用loadMoreFeeds”);
$.ajax({
键入:“获取”,
url:SiteHelper.baseUrl(loaderUri),
数据:{'limit':limit},
cache:false,
成功:功能(结果){
$('.feeds loadmore').remove();
$(“#内容”)。附加(“”);
$(“#内容”)。追加(结果);
$(“#内容”)。附加(“”);
警报(“ajax成功”);
}
});
};
$(函数(){
$('#content')。on('click','feeds loadmore a.more',函数(e){
var loaderUri=decodeURIComponent($(this.attr('data-loader'));
var limitData=$(this.attr('data-limit');
如果(!loaderUri)
返回;
警报(“点击”);
loadMoreFeeds(loaderUri,JSON.parse(limitData));
e、 预防默认值();
})
});

包含此代码的JS文件是否加载了两次?检查您的HTML源。您正在为单击操作使用委托事件处理程序。您是否在加载期间意外地将
.feeds loadmore a.more
类嵌套在
.feeds loadmore a.more
类中?(检查DOM)。这将导致多次呼叫。(2、3、4等)不包括一次。该函数只调用一次。该警报(“点击”);执行一次。但是警报(“loadMoreFeeds调用”);并最终发出警报(“ajax成功”);执行两次您如何验证它是否执行两次?您对
警报的评论表明它不是。如果您在
#content
中看到重复内容,对
SiteHelper.baseUrl(loaderUri)
的请求是否会再次以已经显示的内容进行响应?我曾经在使用CodeIgniter的BonFire时遇到过这个问题。问题是缓存例程在缓存新的js文件时没有删除旧的js文件。可能是那样的吗?如果没有,请尝试在可能触发函数的每个位置使用console.log('fire!'')。这有时有助于找出问题所在。