Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6303
Последний выпуск: 19.06.2015

AJAX, HTTP Header, Opera 9

243
15 января 2009 года
UAS
2.0K / / 19.07.2006
На сайте используется AJAX. Работа следующая (допустим, гостевая книга): введеные данные AJAX-запросом отсылаются на сервер, сервер генерирует ответ в виде обычного текста, который информирует о результате обработки(наприме, "сообщение добавили", "ввели некорректный E-mail",...). Использую библиотеку: AJAX ToolBox (очень неплохая, кстати).

Так вот, что при ошибке ввода, что при добавлении статьи - генерируется стандартный заголовок: HTTP/1.1 200 OK. Но тогда в браузере невозможно отследить - является ли результат положительным или отрицательным. Решил сделать так - если все прошло успешном, то отсылаю сервером заголовок HTTP/1.1 200 OK, иначе отправляем любой другой (например, HTTP/1.1 409 Conflict и т.д., не имеет значения). Вместе с этим заголовком отправляется текст с описанием ошибки/успеха, который будет содержаться в responseText.
Так вот, в осле и файрфоксе все срабатывает норм, но Опера (9 версия) в упор не хочет видеть responseText, если статус != 200. Просто пустая строка.
Лазанья по исходникам (и проверка responseText ещё не обработанного библиотекой) ничего не дали, так что единственное, что приходит на ум - проблема где-то в Опере или в моих кривых руках.

Вопрос - сталкивался ли кто с чем-то подобным??

ЗЫ: посчет отправки XML вместо текста - это я знаю) Но мне сейчас интересно именно то, почему приведенный вариант не работает.
12
16 января 2009 года
alekciy
3.0K / / 13.12.2005
index.html:
Код:
<!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" &#111;&#110;click="sendRequest('index.php','data')">ooo</button>
</body>
</html>

index.php:
 
Код:
<?php
header("HTTP/1.1 400 }I{OIIA");
echo 'на сервере какая то жопа';
?>

отрабатывается корректно во всех браузерах. Вывод? ;)
243
16 января 2009 года
UAS
2.0K / / 19.07.2006
alekciy, спасибо=) Ты развеял мои сомнения=) Просто стояла русская опера с плагинами. Сколько жил - работала безотказно и стабильней любого другого браузера. Так что не мог поверить, что проблема в ней.
Но все же оказалась в ней.
Всё, проблема решена. Спасибо=)
12
16 января 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: UAS
alekciy, спасибо=) Ты развеял мои сомнения=) Просто стояла русская опера с плагинами. Сколько жил - работала безотказно и стабильней любого другого браузера. Так что не мог поверить, что проблема в ней.
Но все же оказалась в ней.
Всё, проблема решена. Спасибо=)


Странно. У меня русская опера. И тоже плагинчик есть. И все работает нормально. Ты точно ни чего не попутал?

243
16 января 2009 года
UAS
2.0K / / 19.07.2006
Да тут, кажется, проблема в самой опере. Просто последнее время она виснет постоянно (при закрытии не закрывается, висит в процессах и жрет ресурсы процессора). Ну и там тоже лаги. Поставил Opera-AC 3.6.1 - на ней все норм. На другой обычной голой опере тоже норм. Так что эта просто полетела)

ЗЫ: бывает)) А я просидел полтора часа, пытаясь понять почему не видит текст после заголовка != 200.
12
17 января 2009 года
alekciy
3.0K / / 13.12.2005
Аааа вон оно что... Да, когда что-то сломалось это самый хреновый вариант. Пишешь-пишешь, вроде все нормально, ан нет, не пашет... Уффф благо с нечто подобным я сталкивался дааааааавнынь давно и только один разик.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог