<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>тест</title>
<script type="text/javascript">
function httpRequest() {
if (window.XMLHttpRequest) {
requestObj = new XMLHttpRequest();
} else if (window.ActiveXObject) {
requestObj = new ActiveXObject("Msxml2.XMLHTTP");
if (!requestObj) {
requestObj = new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
function sendRequest(url,data) {
httpRequest();
requestObj.onreadystatechange = responseServer;
requestObj.open('GET',url,true);
requestObj.send(data);
}
function responseServer() {
if (requestObj.readyState == 4) {
var status = requestObj.status;
document.getElementById('status').innerHTML = status;
if (status == 200) {
document.getElementById('response').innerHTML = document.getElementById('response').innerHTML + requestObj.responseText;
} else if (status == 400) {
document.getElementById('response').innerHTML = document.getElementById('response').innerHTML + requestObj.responseText;
}
//удаляем объект для снижения утечек памяти
delete requestObj;
}
}
</script>
</head>
<body id="body" style="background-Color: red;">
<div id="status"></div>
<div id="response"></div>
<button type="button" onclick="sendRequest('index.php','data')">ooo</button>
</body>
</html>
AJAX, HTTP Header, Opera 9
AJAX ToolBox (очень неплохая, кстати).
Так вот, что при ошибке ввода, что при добавлении статьи - генерируется стандартный заголовок: HTTP/1.1 200 OK. Но тогда в браузере невозможно отследить - является ли результат положительным или отрицательным. Решил сделать так - если все прошло успешном, то отсылаю сервером заголовок HTTP/1.1 200 OK, иначе отправляем любой другой (например, HTTP/1.1 409 Conflict и т.д., не имеет значения). Вместе с этим заголовком отправляется текст с описанием ошибки/успеха, который будет содержаться в responseText.
Так вот, в осле и файрфоксе все срабатывает норм, но Опера (9 версия) в упор не хочет видеть responseText, если статус != 200. Просто пустая строка.
Лазанья по исходникам (и проверка responseText ещё не обработанного библиотекой) ничего не дали, так что единственное, что приходит на ум - проблема где-то в Опере или в моих кривых руках.
Вопрос - сталкивался ли кто с чем-то подобным??
ЗЫ: посчет отправки XML вместо текста - это я знаю) Но мне сейчас интересно именно то, почему приведенный вариант не работает.
На сайте используется AJAX. Работа следующая (допустим, гостевая книга): введеные данные AJAX-запросом отсылаются на сервер, сервер генерирует ответ в виде обычного текста, который информирует о результате обработки(наприме, "сообщение добавили", "ввели некорректный E-mail",...). Использую библиотеку:
Так вот, что при ошибке ввода, что при добавлении статьи - генерируется стандартный заголовок: HTTP/1.1 200 OK. Но тогда в браузере невозможно отследить - является ли результат положительным или отрицательным. Решил сделать так - если все прошло успешном, то отсылаю сервером заголовок HTTP/1.1 200 OK, иначе отправляем любой другой (например, HTTP/1.1 409 Conflict и т.д., не имеет значения). Вместе с этим заголовком отправляется текст с описанием ошибки/успеха, который будет содержаться в responseText.
Так вот, в осле и файрфоксе все срабатывает норм, но Опера (9 версия) в упор не хочет видеть responseText, если статус != 200. Просто пустая строка.
Лазанья по исходникам (и проверка responseText ещё не обработанного библиотекой) ничего не дали, так что единственное, что приходит на ум - проблема где-то в Опере или в моих кривых руках.
Вопрос - сталкивался ли кто с чем-то подобным??
ЗЫ: посчет отправки XML вместо текста - это я знаю) Но мне сейчас интересно именно то, почему приведенный вариант не работает.
Код:
index.php:
Код:
<?php
header("HTTP/1.1 400 }I{OIIA");
echo 'на сервере какая то жопа';
?>
header("HTTP/1.1 400 }I{OIIA");
echo 'на сервере какая то жопа';
?>
отрабатывается корректно во всех браузерах. Вывод? ;)
Но все же оказалась в ней.
Всё, проблема решена. Спасибо=)
Цитата: UAS
alekciy, спасибо=) Ты развеял мои сомнения=) Просто стояла русская опера с плагинами. Сколько жил - работала безотказно и стабильней любого другого браузера. Так что не мог поверить, что проблема в ней.
Но все же оказалась в ней.
Всё, проблема решена. Спасибо=)
Но все же оказалась в ней.
Всё, проблема решена. Спасибо=)
Странно. У меня русская опера. И тоже плагинчик есть. И все работает нормально. Ты точно ни чего не попутал?
ЗЫ: бывает)) А я просидел полтора часа, пытаясь понять почему не видит текст после заголовка != 200.
Аааа вон оно что... Да, когда что-то сломалось это самый хреновый вариант. Пишешь-пишешь, вроде все нормально, ан нет, не пашет... Уффф благо с нечто подобным я сталкивался дааааааавнынь давно и только один разик.