Подсчитать количество объектов, возвращаемых в Ajax-запросе. - PullRequest
0 голосов
/ 13 мая 2018

Мой ajax-запрос возвращает IEnumerable UpcomingGigs, я бы хотел посчитать, сколько Gigs было возвращено за запрос. Я делал различные попытки для этого, однако каждая попытка также включает в себя количество значений свойств, и, следовательно, не является точным результатом.

console.log (data.length); var count = Object.keys (data) .length;

ответ данных ajax:

оба значения возвращают один и тот же неверный результат.

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);
        } 

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 голосов
/ 13 мая 2018

Есть несколько способов сделать это. Один из способов - добавить атрибут данных к элементу 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, чтобы получить счетчик)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...