Я полный Flex noob, поэтому заранее прошу прощения, если мне не хватает чего-то очевидного.
Я написал довольно простой загрузчик файлов в Flex, который вызывает мою внутреннюю часть Django через URLRequest (объект FileReference обрабатывает загрузку). Моя загрузка работает как задумано, и у меня Django возвращает объект HTTPResponse. Таким образом, я хотел бы прочитать содержимое объекта HTTPResponse.
Есть предположения?





К тому времени, когда он доходит до клиента, это обычный HTTP-ответ, поэтому относитесь к нему как к любому другому ответу.
что-то вроде
<mx:HTTPService id = "myHTTPRequest"
url = "{whatever your url request is}"
result = "resultHandler(event)"
fault = "faultHandler(event)"
showBusyCursor = "true"
resultFormat = "object">
затем внутри resultHandler что-то вроде этого
private function resultHandler (event : ResultEvent) : void {
var obj : Object = event.result;
//do something with returned object
}
Выполните отладку в точке resultHandler, чтобы увидеть, что именно возвращается, убедитесь, что это то, что, по вашему мнению, должно быть возвращено.
хм, тогда это совсем другое дело. Я почти уверен, что вы не сможете получить ответ. Если вы используете службу HTTP, как указано выше, тогда все в порядке, если вы используете FileReference, тогда все, что вы можете получить, это такие события, как завершение, прогресс, IO_error и т. д.
Не могли бы вы затем создать и отправить HTTP-запрос для полного события из fileReference, чтобы получить то, что вы отправляете обратно? какие данные вы хотите вернуть, загрузка должна быть просто загрузкой, а не загрузкой и возвратом данных.
вы можете получить доступ к ответу в своем обработчике события onComplete:
private function saveCompleteHandler(event:Event):void {
var loader:URLLoader = event.currentTarget as URLLoader;
trace("saveCompleteHandler - event returned:" + loader.data as String);
}
мы делаем это, чтобы получить json из веб-службы java.
вам просто нужно использовать URLLoader для загрузки URLRequest в первую очередь:
var loader:URLLoader = new URLLoader();
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, statusHandler, 10000);
loader.addEventListener(IOErrorEvent.IO_ERROR, saveErrorHandler, 10000);
loader.addEventListener(Event.COMPLETE, saveCompleteHandler, 10000);
var request:URLRequest = new URLRequest("http:/whereverer");
request.method = URLRequestMethod.GET;
loader.load(request);
Я также новичок в гибкости, и я столкнулся с той же проблемой при загрузке в бэкэнд Java Rest, я решил ее с помощью DateEvent в FileReference. Чтобы получить данные ответа, используйте что-то вроде этого:
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, responseHandler);
var request:URLRequest = new URLRequest("yourUrl");
fileRef.upload(request, "fileData");
private function responseHandler(event:DataEvent):void {
var response:XML = new XML(event.data);
//Note the DataEvent: this is the event that holds the response.
//I sent back data as xml
}
Ваш ответ всегда должен быть успешным кодом статуса HTTP (200), если ваш бэкэнд отправляет коды статуса 500, он не вызовет DateEvent. Ошибки сервера по-прежнему можно отловить с помощью HTTPStatusEvent, но тогда у вас нет доступа к ответу.
Я бы хотел пойти по этому пути, но FileReference.upload () ожидает URLRequest в качестве первого параметра. Я пробовал использовать "as URLRequest", но безуспешно. Любой совет?