|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Зачем URLLoader`у свойство dataFormat
Вроде глупый вопрос, но вот ситуация:
перед началом загрузки пишем Если мой сервер всегда отвечает в формате ключ-значение, тогда все ОК, но в случае необработаной ошибки php-скрипта я получаю ответ в формате XML с описанием проблемы (фактически "сырой" текст). В этом случае мое приложение начинает матом ругаться: Error: Error #2101: Строка, переданная в URLVariables.decode(), должна быть строкой запроса закодированного URL-адреса и содержать пары имя/значение. at Error$/throwError() at flash.net::URLVariables/decode() at flash.net::URLVariables() at flash.net::URLLoader/onComplete() И не говорите мне: . Я так и делаю... Просто интересно, зачем такая хорошая плюшка, которая в определенных условиях превращается в ПЛЮХУ-ЗА-УХО. Пэ.Эс.: Вместо того, чтобы спокойно отловить IOErrorEvent, я так же получаю этот результат. Так что не обязательно гнать на плохо написаный сервер. Он может быть просто недоступен и уже этим портить и без него неплохую картину. |
|
|||||
Тем не менее, если задать
, то свойство data загрзучика будет содержать ByteArray. Это явно не
Лично я это часто использую, когда гружу зашифрованные файлы, которые флеш плеер сразу распознать не может. Не указывать же мне, что там в качестве данных пришли переменные?
|
|
|||||
Я чаще гружу обычный текст, так что свойство это не трогаю, но так как я уверен, что должен получать переменные, то, казалось бы, смело могу пользоваться соответствующим форматом. Но даже в случае IOError я не могу получит IOErrorEvent, так как певым делом вылетает упомянутая мной ошибка. Не красиво как-то...
|
|
|||||
А почему вы решили, что должны получить IOError, если сервер вам возвращает статус 200 и данные в формате XML? Вы пытаетесь переложить проблемы сервера и корявости его API на плечи клиента.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Цитата:
- отчет об ошибке серверного скрипта; - серверный скрипт недоступен (здесь я и должен получить IOError) Я так понял, что для URLLoader`а любой ответ приемлем, но вот проблема в том, что он сперва пытается сконвертировать ответ согласно значению свойства dataFormat, а потом уже смотрит, что же в нем сказано. Вывод сделал, основываясь на том, что если dataFormat равно URLLoaderDataFormat.TEXT, тогда (если php-скрипт недоступен) я спокойно ловлю IOErrorEvent. |
|
|||||
Modus ponens
|
Это на самом деле плохая реализация HTTP во Флеше. Данные-то передаются по HTTP, и должны следовать установленым в нем правилам. О том, что данные передаются в формате пара имя-значение должен говорить заголовок content-type application/x-www-form-urlencoded и это никак не зависит от того в каком формате данные послылались, принимать их нужно по факту наличия заголовка.
Но поскольку с этим особо ничего не поделаешь, и очевидно что эти извращения были сделаны by design. Остается вобщем-то выставлять binary и потом парсить самому, но уже наугад, т.как заголовки ответа по какой-то мистической причине плеер не разрешает читать флешке. Ситуация на столько идиотская, что в одно время я даже задумывался о том, чтобы написать человеческую реализацию HTTP используя Socket - но как-то потом не актуально стало.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 10.07.2012 в 18:02. |
|
|||||
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Регистрация: Jul 2007
Сообщений: 393
|
Цитата:
|
|
|||||
Modus ponens
|
Спасиб, интересная библиотека, надо будет запомнить, жаль автор похоже забросил проект, ну да это такое, мне тоже сейчас ни для чего особо не нужно.
Да, ну это будет работать только для своего сервера - ну так обычно для чужих серверов такое и не нужно, ну или максимум можно свой как прокси использовать... Еще есть вариант для заголовков - посылать запросы используя Явасркипт... но тут опять же облом, если бинарные данные обратно отправляют, т.как не передашь их из Яваскрипта особенно.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 10.07.2012 в 21:03. |
Часовой пояс GMT +4, время: 18:02. |
|
« Предыдущая тема | Следующая тема » |
|
|