我在Flex中使用ExternalInterface的檢索從Javascript AMF編碼字符串彎曲。問題是AMF編碼的字符串有時包含\ u0000,導致ExternalInterface返回null而不是Javascript中的編碼字符串。問題從Javascript傳遞數據
任何想法如何解決這個問題?
在此先感謝。
我在Flex中使用ExternalInterface的檢索從Javascript AMF編碼字符串彎曲。問題是AMF編碼的字符串有時包含\ u0000,導致ExternalInterface返回null而不是Javascript中的編碼字符串。問題從Javascript傳遞數據
任何想法如何解決這個問題?
在此先感謝。
編碼PyAMF的AMF輸出爲base64會做的伎倆。
這裏是蟒蛇編碼部分:
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();
的\ 0000讀取外部數據時被錯誤解釋爲EOF。當它出現在XML文件中時也會發生同樣的情況。
你應該能夠在字符串傳遞到Flash之前有明確的字符序列來取代它,然後回到前臺時在ActionScript。在JavaScript函數中,使用類似於
return returnString.replace (/\0000/g, "{nil}");
這應該在將字符串返回到Flash之前從字符串中刪除不需要的\ 0000字符。
在Flash端,直接接收數據之後使用
receiveString = receiveString.replace (/\{nil\}/g, "\u0000");
。
智力+1。假設奇怪的字符不是AMF數據包的重要部分,這應該工作。 – JeffryHouser 2011-03-01 23:05:23
是\ u0000是AMF消息的一部分。我曾嘗試用另一個字符替換它,並在Flex中返回到\ u0000,但沒有運氣。我正在使用Google App Engine將AMF消息推送至Javascript,然後再推送至Flex。該消息在GAE站點上使用pyamf編碼爲AMF3,在Javascript中看起來正確,但在通過ExternalInterface傳遞給Flex時失敗。在傳入DateTimeProperty或IntegerProperty時,PyAMF編碼使用\ u0000。 StringProperty不是用\ u0000編碼的,所以一種解決方案是將所有的類屬性改爲字符串,但我不喜歡這樣做。 – doorman 2011-03-02 00:46:07
我根據這個新信息編輯了答案。 – weltraumpirat 2011-03-02 05:54:20
你通過的Flash Remoting或通過類似AMFPHP使用AMF?我只使用AMF作爲服務(從來不必使用ExternalInterface)。 - http://amfphp.sourceforge.net/ AMF庫您使用JavaScript的是什麼 – Jacksonkr 2011-03-01 21:57:01
。你有沒有分享一些代碼來重現問題? – JeffryHouser 2011-03-01 22:35:35