Как вернуть документ «noop» через HTTP - PullRequest
2 голосов
/ 22 декабря 2010

У меня есть CGI-скрипт, который делает много вещей.Я пытаюсь сделать сценарий очень простым и переносимым.Мне просто нужен какой-то способ, чтобы пользователь мог отправить сообщение на сервер без потери текущей страницы.Пока у меня есть следующий процесс:

  1. Пользователь загружает «страницу состояния» из сценария CGI.
  2. Страница состояния имеет таймер JavaScript, который будет читать данные (невсю страницу) с сервера каждые две секунды и соответственно изменяйте страницу состояния.
  3. Пользователь щелкает элемент гиперссылки для запуска задания на сервере.
  4. CGI получает параметры от щелчка изапускает задание.
  5. CGI отправляет ответ \n

В этот момент Firefox спрашивает пользователя, хотят ли они загрузить сценарий CGI, и, конечно, сценарий просто\n, который отправил CGI.Вместо этого я хочу, чтобы браузер полностью игнорировал ответ.Если мой CGI-скрипт не отображает эхо, \n apache выдает ошибку.Что я могу сделать, чтобы браузер проигнорировал ответ и остался на текущей странице?Обратите внимание, что я бы не стал перезагружать текущую страницу.Я думаю, что для такого случая должен быть какой-то «заурядный» HTTP-ответ.

Ответы [ 3 ]

3 голосов
/ 22 декабря 2010

Отправить ответ с кодом состояния HTTP 204.От RFC 2616 aka Протокол передачи гипертекста - HTTP / 1.1 :

10.2.5 204 Нет содержимого

Сервер выполнил запрос, но не нуждаетсячтобы вернуть тело-сущность, и может захотеть вернуть обновленную метаинформацию.Ответ МОЖЕТ включать новую или обновленную метаинформацию в форме заголовков объекта, которые, если они присутствуют, ДОЛЖНЫ быть связаны с запрошенным вариантом.

Если клиент является агентом пользователя, он НЕ ДОЛЖЕН изменять свое представление документа с этогочто вызвало отправку запроса.Этот ответ в первую очередь предназначен для того, чтобы ввод данных для действий происходил без изменения вида активного документа агента пользователя, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документу, который в данный момент находится в активном представлении агента пользователя.

Ответ 204 НЕ ДОЛЖЕН включать тело сообщения и поэтому всегда заканчивается первой пустой строкой после полей заголовка.

1 голос
/ 22 декабря 2010

Вместо того, чтобы гиперссылка была реальным <a> или <form> с поведением по умолчанию, пусть это будет какой-то интерактивный элемент, клики которого обрабатываются вашим клиентским кодом. Код Javascript должен отправлять запросы на работу с объектами XMLHttpRequest, предоставляя ему полный контроль над обработкой ответа.

1 голос
/ 22 декабря 2010

Вместо того, чтобы пытаться решить эту проблему на стороне сервера, вы можете изучить решение на стороне клиента.Например, используя jQuery , вы можете легко инициировать AJAX асинхронный запрос к серверу нажатием кнопки.Вам вообще не нужно загружать новую страницу в браузере.

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