Как использовать Ajax / jQuery для обновления таблицы с выводом XML серверного процесса? - PullRequest
2 голосов
/ 02 февраля 2011

У меня есть исполняемый файл на моем веб-сервере, который выводит XML в файл или стандартный вывод.XML содержит данные, которые я хотел бы превратить в таблицу.Этот XML будет уникальным для каждого пользователя и будет периодически меняться.

На моей веб-странице я хотел бы:

  1. Запускать этот исполняемый файл на наборепериод (например, 30 минут) для обновления данных XML

  2. Анализ этого XML и динамическое добавление / удаление строк таблицы при изменении данных XML между запущенными прогонами

Для # 2, я думаю, я могу использовать $.ajax(), чтобы получить файл XML на стороне сервера и работать с его содержимым, используя innerHTML, чтобы отобразить таблицу и добавить ее на веб-страницу.

Я думаю, что часть, на которой я застрял, это пункт № 1.Моя веб-страница выводится из сценария Perl CGI.Как только сценарий завершен, HTTP-запрос завершен, и между клиентом и сервером больше нет связи.

Нужно ли запускать отдельный процесс на сервере, который помещает файл XML где-нибудь, где находится jQuery Ajax?Звоните можете найти его по необходимости?(Я бы хотел этого избежать, поскольку мне пришлось бы управлять многими отдельными процессами и файлами XML в зависимости от того, где находятся пользователи на веб-сайте, вошли ли они в систему и т. Д.)

ИлиЕсть ли более чистый способ заставить веб-страницу на стороне клиента запрашивать у веб-сервера исполняемый файл на стороне сервера без перезагрузки веб-страницы?Что-то вроде скрытой формы, которая при запуске может вызвать действие без перезагрузки всей страницы?

Извините, если это глупые вопросы.Спасибо за ваш совет.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Если честно, мне не нравится идея использовать JQuery для выполнения 30-минутного опроса, потому что тогда он сильно зависит от клиентской стороны. Если у вас такой же тупой пользователь, как и я, когда я открываю вашу веб-страницу одновременно в 7 различных браузерах: D, то, по сути, этот пользователь должен попросить сервер выполнять один и тот же сценарий Perl CGI 7 раз каждые 30 минут. Кроме того, если пользователь посещает веб-страницу только в течение нескольких минут, JQuery никогда не сможет запустить этот сценарий Perl CGI.

Если ваш скрипт не доступен как веб-сервис (ну, во-первых, это было бы идеально), единственная возможная ставка - запланировать запуск скрипта каждые 30 минут, например, с помощью задания cron. Конечно, это отдельный процесс, и я тоже его ненавижу, но, по крайней мере, вы можете гарантировать, что все пользователи будут обновлять данные каждые 30 минут, полагаясь на то, что пользователи будут обновлять данные.

Мои 1,5 цента. :)

1 голос
/ 02 февраля 2011

Вы можете использовать jquery для частого выполнения функции (скажем, 30 минут) и отправки ajax-запроса на сервер.В свою очередь, сервер выполнит и запросит XML-файл и отправит его в функцию javascript, где вы сможете его проанализировать.Насколько я понимаю ваш вопрос, № 1 не проблема.После рендеринга веб-страницы вам ничего не нужно делать.

, например:

window.setInterval(getXML, 1800000); //will execute the function every 30 minutes

function getXML() { 

   $.ajax({
     type: 'POST',
     url: http://yourserver.com/somepageorform,
     data: data, //any data you may need to send
     success: function(data) { 
        var url = data;
        $.ajax({
           type: 'GET',
           url: url,
           success: function(xml) {
           //process the xml
        },
     dataType: dataType
   });
  },
  dataType: dataType

});
}

Это асинхронный вызов вашего сервера.тогда somepageorform запустит cgi и сгенерирует файл XML.в функции doSomething () у вас будет функция, которая обрабатывает XML, поскольку он не будет выполняться до тех пор, пока процесс не будет завершен.Я предполагаю, что CGI вернет путь к файлу, поэтому в вашей функции вы сможете получить и обработать его.

0 голосов
/ 02 февраля 2011

Вы можете использовать функцию jQuery на своей странице, опрашивать ваш сервер и проверять наличие изменений или заставлять сервер отправлять изменения вашему клиенту.

Чтобы упростить первое, тривиально и есть плагинынапример, плагин refresh , который может помочь вам опросить сервер.Это самый простой подход, но он будет означать, что у вас может быть много избыточных вызовов.

В качестве альтернативы вы можете использовать что-то вроде Pusher для отправки уведомлений клиенту после того, как файл сгенерирован наваш сервер.Это немного сложнее, но даст вам лучший контроль над отправкой обновлений клиентам.

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