将数据从Javascript传递到Flex时出现问题

时间:2011-03-01 21:48:30

标签: javascript flash flex actionscript amf

我在Flex中使用ExternalInterface从Javascript中检索AMF编码的字符串。问题是AMF编码的字符串有时包含\ u0000,导致ExternalInterface返回null而不是Javascript中的编码字符串。

知道如何解决这个问题吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

读取外部数据时,\ 0000被错误地解释为EOF。当它出现在XML文件中时也会发生同样的事情。

在将字符串传递给Flash之前,您应该能够使用明确的字符序列替换它,并在ActionScript中接收时返回。在JavaScript函数中,使用类似

的内容
return returnString.replace (/\0000/g, "{nil}");

这应该从字符串中删除不需要的\ 0000字符,然后再将其返回给Flash。

在Flash端,使用

receiveString = receiveString.replace (/\{nil\}/g, "\u0000"); 
收到数据后直接

答案 1 :(得分:2)

将pyamf AMF输出编码到base64就可以了。

这是python中的编码部分:

encoder = pyamf.get_encoder(pyamf.AMF3)
encoder.writeObject(myObject)
encoded = base64.b64encode(encoder.stream.getvalue())

这是AS3中的解码部分:

var myDecoder:Base64Decoder = new Base64Decoder();
myDecoder.decode(base64EncodedString);
var byteArr:ByteArray = myDecoder.toByteArray()
byteArr.position = 0;
var input:Amf3Input = new Amf3Input();
input.load(byteArr);                
var test:MyObject = input.readObject();