Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从Javascript传递到Flex时出现问题_Javascript_Flash_Apache Flex_Actionscript_Amf - Fatal编程技术网

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

将数据从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

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

你知道怎么解决这个问题吗


提前感谢。

读取外部数据时,\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,但我不喜欢这样做。