Получаете ли вы весь набор результатов (все страницы) за один раз, или вы получаете одну страницу за раз? В любом случае вы должны хранить локальный кеш данных, полученных с сервера, и использовать его, когда пользователь перемещается по страницам. Например, если вы извлекаете по одной странице за раз, и пользователь переходит со страницы 1 на страницу 2, вам необходимо извлечь страницу 2 с сервера. Но если пользователь теперь возвращается на страницу 1, вам следует загрузить его из кеша. Если пользователь переходит на страницу 3, вы должны извлечь это с сервера и добавить в кеш.
Далее я бы выделил логику для отображения одной страницы пользователю и извлечения страницы с сервера. Когда пользователь нажимает кнопку следующей страницы, вы должны запросить объект кэша для следующей страницы, но ничего не возвращать. Вместо этого кеш вызовет функцию обратного вызова, как только у него появятся данные. Если данные находятся в кэше, он немедленно вызовет функцию обратного вызова, передавая результат в качестве аргумента. Функция обратного вызова затем обновит представление, представленное пользователю. Если данные не находятся в кеше, на сервер делается запрос ajax для этих данных. Как только данные получены, будет вызвана функция обратного вызова.
Я обычно против использования xml с ajax (я предпочитаю ajaj; асинхронный JavaScript и JSON. Гораздо веселее говорить вслух). JSON - лучшая альтернатива, потому что с JavaScript намного проще работать, он занимает меньше места, как в памяти, так и во время транспортировки. Поскольку объекты JSON являются обычными объектами JavaScript, добавить их в локальный кеш так же просто, как объединить два массива (кеш, который у вас уже есть, и новые элементы, полученные с сервера).