2009-03-17 12 views
4

Возможно ли сделать такой HTTP-ответ, что браузер игнорирует его и продолжает показывать ранее отображаемую страницу?Отвечая так, что браузер ничего не делает - возможно ли это?

Я имею в виду следующий сценарий:

а) пользователь нажимает что-то

б) некоторые POST идет на сервер (или GET, но давайте придерживаться процедуры POST, как более интересно)

с) сервер решает, что по какой-то причине он не хочет, чтобы отправить ответ на это время

г) сервер отправляет специально созданный ответ

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

PS Конечно, это может быть завернута с помощью AJAX, но я спрашиваю, возможно ли решение без использования javascript с голыми костями

ответ

12

Попробуйте вернуть HTTP 204 без содержания. Смотрите описание этого ответа кода в RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1), где он говорит:

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

+0

Новый трюк. – JoshBerke

+0

Спасибо, это то, что я искал. – Mekk

+1

И вот почему нет глупых вопросов. –

1

Это метод, обычно называемый AJAX. Он требует Javascript и функцию XMLHttpRequest.

Редактировать: Заметил ваш «PS» внизу. 204 response, предложенный в другом ответе, выглядит так, как будто это может быть допустимое решение, отличное от Javascript.

1

Предположим, вы это сделали.

Что делает пользователь? Конечно, отправьте форму.

Несколько раз.

Затем они решают, что ваш сайт сломан, и уйти.

+0

По-прежнему в некоторых сценариях ошибок это то, что я считаю полезным ... – Mekk

+0

Мне любопытно. Почему бы вам не дать никаких отзывов? Не было бы лучше просто скрывать/серовать кнопку отправки в таких случаях? В чем преимущество скрытия процесса от пользователя, если вы не хотите ничего ... хммм. – MarkusQ

-2

№. Протокол HTTP состоит из цикла запроса-ответа. Сервер не может решить НЕ ответить (может, но тогда он нарушает протокол и совершает ошибку).

+0

Однако существует определенный HTTP-код ответа, который сообщает браузеру: * не * обновлять или изменять то, что он отображает в настоящее время. – Eddie

0

Я думаю, что для этого вам нужен Javascript, вы можете отправить запрос и в зависимости от ответа сервера Javascript может выполнить возврат false, избегая обновления/перезагрузки фактической страницы.

Я не знаю об ответе 204, но, возможно, так вы можете сделать это со стороны сервера.

Другой способ сделать это (также Javascript) - сделать ложное возвращение сразу после отправки запроса и в зависимости от ответа сервера (с помощью ajax) вы можете изменить фактическую страницу или отправить пользователя на другую страницу.