0

XML形式の応答を受け入れるURLStreamオブジェクトがありますが、残念ながら、応答の最初の4文字が切り取られており、xmlの形式が正しくありません。

URLLoaderオブジェクトを使用すると、サーバーから返されるxmlは正しくフォーマットされます。

誰かがこれを修正する方法を知っていますか?

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

ありがとう

4

1 に答える 1

0

簡単な回避策は次のとおりです。

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.
}

誤ってコーディングされた場所をどこかに移行しました。トレース/デバッグを使用して機能してください。ただし、これに近いものを使用すると問題が解決します。市長のブラウザでチェックして、どこでも問題なく動作することを確認する必要があります。

于 2012-11-20T12:00:09.090 に答える