
26.03.2011, 20:52
|
Аспирант
|
|
Регистрация: 09.02.2009
Сообщений: 57
|
|
getAllResponseHeaders() и status имеют смысл только при readyState==4?
Метод getAllResponseHeaders() и свойство status объекта аякса имеют смысл только при свойстве readyState равному 4?
Дело в том что вышеуказанный метод и свойство в IE при меньшем значении readyState меньше чем 4 выдают ошибку при обращении.
Я реализую COMET и хочу при установке соединения получить заголовки не разрывая его.
Стало быть я не могу получить хотя бы при поступлении первых данных от сервера при readyState=3 заголовки? Хм.. странно, обычно заголовки в PHP всегда первыми идут даже если ответ не завершился, и почему же их не возможно тогда получить если контент в браузер уже поступает?
|
|

26.03.2011, 21:19
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
3- часто в ответе доступны некоторые частичные данные, но сервер не закончил свой ответ.
http://www.ibm.com/developerworks/ru...wa-ajaxintro2/-почему не стоит рассматривать промежуточные ответы
Сообщение от mister_maxim
|
странно, обычно заголовки в PHP всегда первыми идут даже если ответ не завершился, и почему же их не возможно тогда получить если контент в браузер уже поступает?
|
а аякс это рнр чтобы на него навешивать стандарты рнр в полном объёме? это третий между скриптом и рнр со своими стандартами и правилами,связывающий двухсторонне между собой стандарты и привила рнр и скрипта -это об ие
Последний раз редактировалось dmitriymar, 26.03.2011 в 21:45.
|
|

26.03.2011, 21:46
|
Аспирант
|
|
Регистрация: 09.02.2009
Сообщений: 57
|
|
Статья большая, бегло глянул, но не смог найти почему не стоит рассматривать промежуточные ответы. Как раз частичные данные ответа сервера мне и нужны, т.к. я реализую одним подключением приложение. Знаю что такое возможно по технологии COMET.
|
|

26.03.2011, 21:55
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
проблема в том что бегло глянул-в итоге вместо знаний -слегка знания.
внизу статьи что иногда идёт перескок состояний.
до сомет стоит разобраться с аяксом.
а фраза некоторые частичные никогда не означала некоторые полные.
Последний раз редактировалось dmitriymar, 26.03.2011 в 22:02.
|
|

26.03.2011, 22:19
|
Аспирант
|
|
Регистрация: 09.02.2009
Сообщений: 57
|
|
Нет там фразы "перескок состояний". А с аяксом я год назад разбирался, целый день потратил чтобы статью приличную прочитать, и класс свой написал. Только вот сейчас его довожу ума из за некорректностей. Так что не знаю как еще с аяксом разбираться правильно.
|
|

26.03.2011, 23:03
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от mister_maxim
|
класс свой написал
|
отсюда можно поподробнее?
Сообщение от mister_maxim
|
Нет там фразы "перескок состояний"
|
Как и почти все кросс-браузерные проблемы, эти состояния готовности используются несколько непоследовательно. Вы могли бы ожидать, что состояния всегда изменяются от 0 к 1, от 1 к 2, от 2 к 3, от 3 к 4, но на практике это редкий случай. Некоторые браузеры никогда не выдают 0 или 1, а сразу перепрыгивают к 2, затем к 3 и 4. Другие браузеры выдают все состояния. Но некоторые выдают состояние 1 несколько раз. Как вы видели в последнем разделе, сервер вызывал updatePage() несколько раз, и каждый вызов приводил к появлению всплывающего окна предупреждения – наверное, это не то, чего вы хотели!
а это что? по тойже причине некоторые библиотеки применяют обход опросов промежуточных состояний
одна статья это уже приличные знания))
ну а если бы статья была дочитана до конца то и эта бы строчка была прочитана.ключевые слова я выделил
3- часто в ответе доступны некоторые частичные данные, но сервер не закончил свой ответ.
Последний раз редактировалось dmitriymar, 26.03.2011 в 23:23.
|
|

27.03.2011, 11:39
|
Аспирант
|
|
Регистрация: 09.02.2009
Сообщений: 57
|
|
Вот так намного лучше, что вы процитировали, можно было цитату и более короткую так чтобы в поиск скопировать и быстро в оригинале найти.
Да.. класс который я написал, писал основываясь на знаниях полученных на тот момент. То что состояния меняются не последовательно в разных браузерах - это я уже давно знал. Какие я особенности узнал и как я работаю с аяксом в своем классе:
1 я не использую метод onreadystatechange(), т.к. в той статье сказано что он не корректно реализован в IE и утечка памяти с ним.
вместо него я использую setInterval-опрос состояний readyState.
2. вызываю onProgress обработчик в своем классе если readyState изменился, или если изменилось содержимое responseText, если изменилось responseText я вычисляю насколько изменлось, т.е.возвращаю последнее добавление к тексту: responseText.substr(o.oldLength).
3.Еще я знаю что браузер IE получает новую порцию данных при ответе не менее 2 килобайт, поэтому в промежуточные ответы на сервере дописываю пробелы до 2049 символов.
4.Еще я обрабатываю отсутствие в ответе заголовка Date для IE, т.к. IE имеет свойство не отправлять запрос а ковырнуть в своем кэше ответ на него, и тогда я заново запускаю отправку и по состоянию 304 считываю с кэша.
Кстати с кэшированием на Ajax хочу сегодня обстоятельней разобраться - проверить всё практически, а не доверять словам разных статей. Кстати за статью что вы мне дали - спасибо, рассмотрю её основательней.
|
|

27.03.2011, 19:08
|
Аспирант
|
|
Регистрация: 09.02.2009
Сообщений: 57
|
|
В IE8, гляжу вообще нельзя при readyState<4 получать responseText, можно правда получить responseXML.xml но следущие порции данных в одном соединении уже не пошлёш, т.е responseXML.xml будет пусто. Хм.. можно же наверное IE8 заставить поддерживать COMET, если не через аякс объект то тогда через IFrame или Script...
|
|
|
|