#php #jquery #ajax #arrays #pagination
#php #jquery #ajax #массивы #разбивка на страницы
Вопрос:
У меня есть массив, который в настоящее время разбит на страницы с помощью параметров URL (например . …. php?page=2amp;blah= blopamp;glob= gloo).
На данный момент каждый раз, когда страница загружается, XML-файл загружается из механизма запросов, анализируется, а затем я извлекаю массив объектов, которые я хочу использовать.
Как мне настроить это так, чтобы мне не нужно было перезагружать страницу и только один раз читать из XML-файла?
Я довольно новичок в PHP, поэтому, пожалуйста, потерпите меня. После небольшого исследования я подумал, что Ajax подходит для этого? Пожалуйста, поправьте меня, если я ошибаюсь. Я пытался узнать кое-что о разбивке на страницы с помощью Ajax, но самые полезные вещи, которые я нашел, были для разбивки данных на страницы из базы данных mysql, а не для массива объектов.
Кто-нибудь может предоставить какие-либо указания? Я горю желанием учиться.
Комментарии:
1. Если вы не используете какой-либо кэш в памяти (memcached), вам придется читать XML-файл (или его локально сохраненную версию) каждый раз, когда вам нужно больше данных из него. Вас действительно беспокоит время взаимодействия с сервером <-> xml или время взаимодействия с браузером <-> сервером?
2. Моя самая большая проблема здесь — разбиение на страницы на одной странице без загрузки страницы. Это мобильное приложение, поэтому я хочу, чтобы интерфейс был максимально упрощен!
Ответ №1:
Когда мне это нужно, я создаю функцию кэширования, которая либо А) загружает XML из исходного источника, а затем сохраняет его в папке кэша, либо Б) загружает его из папки кэша, если он существует, и соблюдены другие критерии (например, свежесть).
На одном сайте, который должен был извлекать данные с довольно медленного сервера, я поместил A) в задание cron и всегда считывал данные из кэша для веб-сайта.
Если вам нужна разбивка на страницы больших данных, вот хороший пример: http://net.tutsplus.com/tutorials/php/how-to-paginate-data-with-php /
Комментарии:
1. Спасибо за советы по кэшированию Matt. Источник XML будет редко меняться, так что это хорошая идея. Что касается разбивки на страницы, я уже закодировал свою собственную разбивку на страницы PHP, но я хочу избавиться от загрузки страниц, как мне это сделать?
2. Мэтт Х описывает файловый кэш. В основном выполняйте a
file_get_contents('url to XML')
только в случаеfile_exists('path to cache file')
сбоя. В противном случае выfile_get_contents('path to cache file')
.3. Если вы хотите полностью избавиться от загрузки страниц, используйте приведенный ниже ответ (AJAX) от @imkingdavid. Вы можете загружать каждую страницу с помощью AJAX-запроса или загружать все данные сразу, скажем, в массив JSON, и создавать представление страницы по запросу. JSON подходит, если у вас конечный объем данных, в противном случае используйте комбинацию загрузок AJAX для нескольких страниц одновременно, хранящихся в объекте JSON.
Ответ №2:
Вы могли бы адаптировать AJAX, который вы нашли для работы с базой данных, для работы с вашим объектом данных, чтобы страница загружалась только один раз.
Комментарии:
1. Большинство источников, которые я нашел, относятся к классу разбивки на страницы, который специально предназначен для использования с MySQL :-/
2. Это может быть сделано специально для MySQL, но оно должно быть адаптируемым для использования с другими типами хранения данных (например, XML). Можете ли вы ссылаться на класс?
Ответ №3:
Вы можете кэшировать XML либо в памяти, используя memcached
, либо сохранив его в локальный файл и прочитав оттуда.
Кроме того, вы можете сохранить его в другом, более быстром формате (может json
быть?) и разделить его на файлы — по одному файлу для каждой страницы — и читать файл только для нужной вам страницы.
Если файл зависит от пользователя, другим вариантом будет сохранить его в сеансе (если он не слишком большой в форме массива), или, если вы хотите сохранить его в файле, добавьте идентификатор сеанса к имени файла.
Все зависит от того, что вы хотите сделать с файлом и его содержимым.
Ответ №4:
Возможно, вас заинтересует этот класс для разбиения php на страницы.