Итого Количество товара
Если вы ищете общее число элементов в самом списке (в отличие от числа элементов в фильтрованной зрения) можно непосредственно получить доступ к списку в $count
собственности.
"/_vti_bin/ListData.svc/MPIC/$count"
Это возвращает количество элементов.
пейджинга (при необходимости)
Для имитации подкачки с помощью REST вы можете сделать следующее:
- Используйте параметр
$skip=n
пропустить первые n
записи в соответствии с параметром $orderby
- Используйте параметр
$top=n
, чтобы вернуть верхние n
записей в соответствии с $orderby
и $skip
параметров.
Работа с асинхронным
Самой большой проблемой в вашем коде является то, что у вас есть два асинхронных функция обратного вызова, которые вы используете, чтобы получить сумму результирующих элементов. Поскольку эти вызовы функций не выполняются в рамках одной и той же области, вы не можете получить доступ к их значениям одновременно.
Обходным способом является использование функциональной цепочки для перемещения вашей логики вперед в функции (-ы) обратного вызова.
Пример использования $ пропустить и $ топа
Вот пример использования $skip
и $top
параметров с вашим условием кода, используя рекурсивную функцию обратного вызова, чтобы получить общее количество результатов перед обновлением текста вашей ALLCount1
элемент.
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
updateTotal(count);
});
function updateTotal(total){
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skip="+total+"&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
if(count > 0){
updateTotal(total+count);
}
else{
$("#ALLCount1").text(total);
}
});
}
Пример использования $ skiptoken и $ топ
Если вы вынуждены использовать $skiptoken
вместо $skip
(например, при запросе списка 5000+ элементов), вы определенно можете все еще использовать его , но у вас будет немного больше работы.
Принимать во внимание, что $skip
просто хочет удалить все предметы, $skiptoken
хочет, чтобы ID последнего элемента пропустил.
Код будет в основном таким же, как указано выше, но вам нужно будет погрузиться в результаты данных и вырвать значение идентификатора последнего элемента. Я оставлю это как упражнение для читателя.
updateTotal(0,0);
function updateTotal(skip,total){
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skiptoken="+skip+"&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
if(count > 0){
var lastItemId;
// TODO: get last item id from results here
updateTotal(lastItemId,total+count);
}
else{
$("#ALLCount1").text(total);
}
});
}
Итак, когда я смотрю на первый счет. У него есть следующий, который начинается с 1016. Я думаю, потому что первые 16 документов были удалены так. Как работает пейджинг? Я нашел некоторые комментарии, упоминающие об этом, но ничего конкретного о том, как выполнить. –
Вы по-прежнему хотите ограничить его до 1000, если только вы не знаете, сколько из них удалено все время. Лучше ограничить его до 1000, вернуть его 984 и получить точное количество. – Matt
[этот пример] (http://stackoverflow.com/questions/6951191/do-while-javascript-issue) должен вас начать. В нем есть пример кода, который потребует модификации, но вы можете отправить другой вопрос, если у вас есть проблемы с ним. – Matt