AS3 URLStream отсекает первые 4 символа ответа
У меня есть объект URLStream, который принимает ответ в формате XML, но, к сожалению, первые 4 символа ответа обрезаются, что приводит к неправильному формату XML.
XML, возвращаемый с сервера, правильно отформатирован, если я использую объект URLLoader.
Кто-нибудь знает, как это исправить?
private var _stream:URLStream;
_myVariables = new URLVariables();
_myVariables.email = _un;
_urlRqSend = new URLRequest(_loginURL);
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("password:"+_pw);
var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
_urlRqSend.requestHeaders.push(credsHeader);
_urlRqSend.data = _myVariables;
_urlRqSend.method = URLRequestMethod.POST;
_stream = new URLStream();
_stream.addEventListener(flash.events.Event.COMPLETE, handleResponse);
_stream.load(_urlRqSend);
private function handleResponse(ev:flash.events.Event):void{
trace("returned data: ",_stream.readUTFBytes(_stream.bytesAvailable));
}
Выход
// возвращенные данные: l version="1.0"...etc
Правильный ответ должен быть
// возвращенные данные: <?xml version="1.0"...etc
Спасибо
1 ответ
Решение
Вот простой обходной путь:
var xml:String = _stream.readUTFBytes(_stream.bytesAvailable)
if(xml.search("<?xml version="1.0" != 0)){ //you may have to mix the "-s to compile.
var start:int=xml.search("?>") + 3 //this will give you the character of the first element after the xml declaration (like <root> ...)
xml = '<?xml version="1.0"...etc' + xml.Splice(start); //splice will return <root> ..., and we'll add the declaration before it.
}
Я перенес неправильное кодирование в swomewhere, пожалуйста, используйте traces/debug для работы, но что-то близкое к этому решит проблему. Вы должны проверить это в браузерах мэра, чтобы убедиться, что он работает везде.