Ньюансы работы Opera с XMLHttpRequest или почему пусто в responseText

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

Комментарий товарища Maelow к посту про Anti-Smap Image + Ajax Comment :

«в опере у меня при вводе неверных символов в КАПЧЕ выскакивает окно с ошибкой не содержащей текста»

заставил запустить установленную, но редко применяемую Opera, дабы удостовериться в том, что действительно выдаётся пустое сообщение.

Долгие попытки поиска ошибок в коде плагина, а так же гугленье заставили сделать вот какой вывод о работе XMLHttpRequest, а точнее о получаемых ответах:
«При получении Opera в header’е страницы, возвращаемой запросом при помощи XMLHttpRequest, любого статуса кроме 200, данные, содержащиеся на странице, не попадают в responseText.»

Именно поэтому и не работали в Опере сообщения об ошибках Ajax-Comment, который возвращал текст сообщения вместе с 406 (Not Acceptable) ошибкой. FireFox и IE ловили ошибку и, получив ещё и текст со страницы, выдавали alert как нужно, а Опере ничего не оставалось, кроме как показывать пустые строки.

В принципе всё достаточно логично, только вот в скрипте Ajax-Comment пришлось делать «финт-ушами» и вносить изменения, дабы и Опера жила припеваючи.

Сам способ я считаю не слишком хорошим, но если кто знает более простой, то прошу дать ссылку или описать свой метод.
Поступил я так: заменил header ответа с 406 на 200 (вот это-то, по сути, и есть не правильное, в плане логики, действие) и добавил в сам текст сообщения — «Error!».
В java-script, который обрабатывал ответы, добавил проверку на наличие этого сообщения, а затем уже вызов alert без него:

Если вы уже поставили себе Ajax-Comment, то просто замените файл ajax-commens.php, взяв его из этого архива. Во всех остальных сборках я уже обновил этот файл.

Ньюансы работы Opera с XMLHttpRequest или почему пусто в responseText: 2 комментария

Добавить комментарий