Я могу придумать как минимум 2 способа получить то, что тебе нужно.
Метод № 1
Серверная сторона разбивает выходные данные вашего веб-сервиса на два запроса и возвращает наборы. Первоначальный запрос должен содержать список идентификаторов результатов и второй запрос, который можно назвать одним набором результатов по имени идентификатора.
service.com / results.xml.php? возвращает:
1
2
и т.д ...
service.com / result.xml.php? Id = возвращает:
так далее...
Это приведет к большому количеству запросов, которые приведут к дополнительным расходам, но не позволят вам загружать несколько повторяющихся результатов снова и снова.
Что вы можете сделать, так это спамить первый запрос и сравнить его с идентификатором, отображаемым в данный момент, а затем запросить №2 для получения дополнительной информации, которую вам необходимо отправить.
Метод № 2:
Пусть 1 запрос вернет все результаты, как вы делаете сейчас, но используйте поле идентификатора, хранящееся локально в вашей части сценариев, которое отслеживает, какой контент уже отображен, и только добавляет новые данные через AJAX на существующую страницу. В этом случае вам понадобится, чтобы ваш javascript извлекал и анализировал XML в циклической среде.
Истинная загвоздка в том, как ваше приложение определяет, что оно имеет все результаты, и прекращает цикл?
Лучший способ сделать это, возможно, состоит в том, чтобы сократить ваш запрос, чтобы попытаться получить количество строк для вашего окончательного набора результатов, перед отправкой запроса, который возвращает всю необходимую вам информацию.
пример:
выберите элемент сравнения из исходного кода, где параметр сравнения =
это просто скажет вам, сколько элементов соответствует вашему запросу с наименьшим количеством информации, возвращаемой вам. Затем вы рассчитываете этот набор результатов и сохраняете его для дождливого дня.
выберите * из исходного кода, где сравнивать =
Теперь вы получаете все детали, и я полагаю, что это займет больше времени. теперь вы можете эффективно зациклить свой код дисплея, чтобы узнать, когда прекратить проверку результатов.
ajax псевдокод для метода # 1:
- установить текущие отображаемые результаты на 0
- установить массив отображаемых идентификаторов в нуль
- запустите базовый запрос, чтобы определить, сколько строк вы ожидаете всего (подсчитайте каждого поставщика отдельно, если у вас есть несколько источников, затем сложите их все)
- войти в цикл
- получить XML с деталями
- обработать xml id по id, чтобы увидеть, отображается ли он еще (если массив равен нулю, первая итерация отобразит их все)
- любой идентификатор, который необходимо отобразить, добавьте идентификатор в качестве члена массива отображаемого идентификатора.
- накачать детали в документ
- увеличивать текущие отображаемые результаты на 1 для каждой отображаемой детали идентификатора результата
- проверьте, показали ли вы все ожидаемые результаты. (displayids> = ожидаемые результаты). если правда выходной цикл. если нет, продолжайте.
, чтобы оптимизировать это, вы, скорее всего, захотите добавить какое-то управление временем, или вы просто будете рассылать спам на сервере с глупой высокой скоростью для xml, но вы можете протестировать.