【问题标题】:jQuery results set keeping populatingjQuery 结果集不断填充
【发布时间】:2010-08-29 17:23:32
【问题描述】:

我有一个 jQuery 函数,它可以进行 ajax 调用,该调用构建一个 HTML 字符串来填充 <ul></ul> 功能。问题是页面上有刷新页面的链接,问题是添加了 jQuery ajax 调用的 HTML 再次将 HTML 添加到页面,因此结果不会加倍。如果你再次这样做,结果会再次添加。

所以我的问题是如何清除 HTML 以使结果重复多次?或者解决这个问题的最佳方法是什么?

// 展开复制到分组模态组 $(".groupZones .expand").live('click', function() { $(this).siblings('.contract').show(); $(this).css('display', 'none'); $(this).parent().parent().siblings('.groupDetails').css('display', 'block'); $(this).parent().parent().siblings('.groupDetails').find('ul.device').find('ul.list').after(''); var cwpUserId = $('#ctl00_cphBody_hfCwpId').val(); var groupId = $(this).parent().siblings('.add').find('input').val(); sortOn = "位置"; var mode = "dayparts"; var groupUl = $(this).parent().parent().siblings('.groupDetails').find('ul').find('ul li.head'); var groupDetails = $(this).parent().parent().siblings('.groupDetails'); //获取区域详细信息.. // 加载。

            $.ajax({
                type: "POST",
                url: "ajax/DaypartMessagingGroups.asmx/GetDetailsForCopyToGroup",
                data: "{'groupId':" + groupId + ",'cwpUserId':" + cwpUserId + ",'pageNum':0,'pageSize':5, 'sortOn':'" + sortOn + "','sortDirection':'" + sortDirection + "','mode':'" + mode + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    //$(btn).parents("ul.list-group-zones").children("li:.head").after(msg.d);
                    $(groupUl).after(msg.d);
                    $('.location').find('.contract').hide();

                    var copyZonePerPage = 5;
                    //var copyZoneItemsCount = $(groupUl).siblings('#hfAllGroupZones').val();
                    var copyZoneItemsCount = $('#hfAllGroupZones').val();
                    var copyZonePages = Math.ceil(copyZoneItemsCount / copyZonePerPage);
                    var copyZoneHtml = '';
                    var copyZoneCurLink = 0;
                    var current_copyzone_pagination_set = 1;
                    var num_of_pagination_shown = 0;
                    alert('Line 2113 CBG');

                    if (copyZonePages > 20) {
                        //var pagesAdded = (parseInt(current_copyzone_pagination_set) - 1) * 10;

                        while (num_of_pagination_shown < 20) {
                            copyZoneHtml += '<a class="page_link_clicked" longdesc="' + copyZoneCurLink + '">' + (copyZoneCurLink + 1) + '</a>';
                            copyZoneCurLink++;
                            num_of_pagination_shown++;
                        }

                        copyZoneHtml += '<a class="page_link" id="btnNextZoneSet" longdesc="' + copyZoneCurLink + '">...</a>';

                    }
                    else {
                        while (copyZonePages > copyZoneCurLink) {
                            copyZoneHtml += '<a class="page_link_clicked" longdesc="' + copyZoneCurLink + '">' + (copyZoneCurLink + 1) + '</a>';
                            copyZoneCurLink++;
                        }
                    }

                    $(groupUl).parent().parent().find('ul li.footer').html(copyZoneHtml);
                    $('.page_link_clicked[longdesc=0]').addClass('current');

                },
                error: function(err) {
                    var err = eval("(" + err.responseText + ")");
                    if (ShowModalLogin(err.ExceptionType)) {
                        alert("An error occurred.");
                    }
                }
            });

        });

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    在插入字符串中的内容之前,我会询问&lt;ul&gt; 是否为空。

    var $ul = $('#myUL');
    
    if( $ul.is(':empty') )
       $ul.append( content );
    

    或更短的版本:

    $('#myUL:empty').append(content);
    

    请注意,:empty 表示完全为空,包括空格。


    编辑:

    如果页面刷新是某些其他操作的不必要的副作用,您可以在处理程序中使用 event.preventDefault() 阻止这些 &lt;a&gt; 元素。

    $('a.myLink').click(function( e ) {
        e.preventDefault(); // prevents the default behavior of the <a> element.
        // run your code
    });
    

    【讨论】:

    • OP 提到刷新页面。认为这意味着数据刷新?
    • @rchern - 我也想过。从问题上看不清楚。如果是这种情况,我认为最好采用一种只检索新的、唯一的数据而不是整个数据集的策略,以减少带宽。或者至少跟踪已下载的项目,并仅附加收到的唯一项目以减少 DOM 活动。不过,好点。 :o)
    • 我把它解释为要刷新ul中的实际数据。
    • @rchern - 你可能是对的。唯一让我不以为然的是,OP 指的是刷新整个页面,这似乎不像 AJAX。我假设正在进行一些缓存,并且刷新来自不同的操作。不过,我很可能是错的。
    • 通过一些调试和警告消息,我看到 jquery 正在运行一次。 Web 服务正在处理多次。更好的解释是页面显示
        元素的信息,也有子
          元素。该页面看起来像一个带有子表单的表单。页面顶部有过滤器链接,可让我更改顶级数据。当我点击过滤页面的链接并且页面已经被该类型的数据过滤时,子
            重复 web 服务调用多次,但只调用 jquery 方法一次。
    【解决方案2】:

    假设您添加的内容由容器(您的&lt;ul&gt;)包装,只需在添加新内容之前清除容器的内容即可。

    您可以使用 jQuery 的 .remove() 函数来完成此操作。

    【讨论】:

    • 通过一些调试和警告消息,我看到 jquery 正在运行一次。 Web 服务正在处理多次。更好的解释是页面显示
        元素的信息,也有子
          元素。该页面看起来像一个带有子表单的表单。页面顶部有过滤器链接,可让我更改顶级数据。当我点击过滤页面的链接并且页面已经被该类型的数据过滤时,子
            重复 web 服务调用多次,但只调用 jquery 方法一次。
    猜你喜欢
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2016-04-03
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2014-01-05
    相关资源
    最近更新 更多