计算Ajax请求中返回的对象数

时间:2018-05-13 18:02:03

标签: javascript jquery .net ajax asp.net-mvc

我的ajax请求返回一个IEnumerable UpcomingGigs,我想计算每个请求返回多少个Gigs。我已经做过各种尝试,但每次尝试都包括属性值的计数,因此不是一个准确的结果。

CONSOLE.LOG(data.Length); var count = Object.keys(data).length;

ajax数据响应:

    08/01/2021 17:50:00 - 鲍勃

两个值都返回相同的错误结果。

public ActionResult FetchGigs(int skip, int take)
        {
            var upcomingGigs = _context.Gigs
                                .Include(g => g.Artist)
                                .Where(g => g.DateTime > DateTime.Now)
                                .OrderBy(d => d.DateTime)
                                .Skip(skip).Take(take);

            var viewModel = new GigsViewModel
            {
                UpcomingGigs = upcomingGigs
            };
            return PartialView("FetchGigs", viewModel);
        } 

视图模型

的Ajax

    public class GigsViewModel
        {
            public IEnumerable<Gig> UpcomingGigs { get; set; }
            public int TotalGigs { get; set; }
            public bool ShowActions { get; set; }
            public string Heading { get; set; }
        }

$(window).scroll(function () {
                if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
                    $.ajax({
                        type: "GET",
                        url: "@Url.Action("FetchGigs")",
                        data: { skip: skip, take: take },
                        success: function (data) {

                            console.log(data.GigsViewModel.gigId.);

                            $(".result").append(data);
                        }
                    })
                }
            });

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。一种方法是从局部视图中添加要渲染的ul元素的数据属性,并将项目计数存储在该属性中。您可以使用IEnumerable.Count()方法。

@model YourNamespace.GigsViewModel
<ul data-itemcount="@Model.UpcomingGigs.Count()">
    @foreach (var item in Model.UpcomingGigs)
    {
        <li>@item.Title</li>
    }
</ul>

现在在您的ajax成功事件中,使用$.parseHTML解析从服务器收到的响应,然后读取数据属性值

success: function (data) {
    var html =$.parseHTML(data);
    var itemCount = $(html).data("itemcount");
    alert(itemCount);
}

另一种选择是使用find方法获取列表项数组并获得它的长度。

success: function(data) {
    var html = $.parseHTML(data);
    var itemCount = $(html).find("li").length;
    alert(itemCount);
}

我会采用第一种方法,因为我不喜欢我的浏览器做了这么多工作。 (它必须在这里遍历dom元素以获得计数)