将数据从Javascript传递到Flex时出现问题
我在Flex中使用ExternalInterface从Javascript检索AMF编码的字符串。问题是AMF编码的字符串有时包含\u0000,这会导致ExternalInterface返回null,而不是Javascript中的编码字符串 你知道怎么解决这个问题吗将数据从Javascript传递到Flex时出现问题,javascript,flash,apache-flex,actionscript,amf,Javascript,Flash,Apache Flex,Actionscript,Amf,我在Flex中使用ExternalInterface从Javascript检索AMF编码的字符串。问题是AMF编码的字符串有时包含\u0000,这会导致ExternalInterface返回null,而不是Javascript中的编码字符串 你知道怎么解决这个问题吗 提前感谢。读取外部数据时,\0000被错误解释为EOF。当它出现在XML文件中时也会发生同样的情况 在将字符串传递给Flash之前,以及在ActionScript中接收到字符串之后,您应该能够用一个明确的字符序列替换它。在JavaS
提前感谢。读取外部数据时,\0000被错误解释为EOF。当它出现在XML文件中时也会发生同样的情况 在将字符串传递给Flash之前,以及在ActionScript中接收到字符串之后,您应该能够用一个明确的字符序列替换它。在JavaScript函数中,使用
return returnString.replace (/\0000/g, "{nil}");
这应该在将字符串返回Flash之前从字符串中删除不需要的\0000个字符
在闪存端,使用
receiveString = receiveString.replace (/\{nil\}/g, "\u0000");
直接在接收数据之后。将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();
您是通过Flash远程处理还是通过类似AMFPHP的方式使用AMF?我只使用过AMF作为服务(从未使用过外部接口)您使用什么AMF库来编写JavaScript。你能分享一些代码来重现这个问题吗?+1表示巧妙。假设奇怪字符不是AMF数据包的重要部分,则此操作应该有效。是的\u0000是AMF消息的一部分。我尝试用另一个字符替换它,并在Flex中返回到\u0000,但运气不佳。我正在使用GoogleAppEngine将AMF消息推送到Javascript,然后推送到Flex。消息在GAE站点上使用pyamf编码到AMF3,在Javascript中看起来正确,但通过ExternalInterface将其传递到Flex时失败。PyAMF编码在传入DateTimeProperty或IntegerProperty时使用\u0000。StringProperty不是用\u0000编码的,所以一个解决方案是将所有类属性更改为string,但我不喜欢这样做。