我正在努力通过FlashVars将JSON对象传递给.swf并解码AS3中的JSON FlashVars,并希望你能帮助我。
问题:
当我尝试解码FlashVars时,我得到JSONParseError: Unexpected o encountered
。
情况:
PHP函数从哈希创建图像路径并将它们放在这个JSON对象中:
[{"index":"0", "path":"image1", "ext":"jpg"},
{"index":"1", "path":"image2", "ext":"jpg"},
{"index":"2", "path":"image3", "ext":"jpg"}]
此JSON通过Flashvars传递给.swf。在HTML中我有这个:
<param name="FlashVars" value='[{"index":"0", "path":"image1", "ext":"jpg"},{"index":"1", "path":"image2", "ext":"jpg"},{"index":"2", "path":"image3", "ext":"jpg"}]'/>
PHP函数和.swf位于网站空间的同一文件夹中
然后我尝试使用此AS3代码解码main.as文件中的FlashVars(导入as3corelib):
var imagePaths:Object;
try {
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
trace(paramObj.toString());
if(paramObj){
imagePaths = JSON.decode(paramObj.toString());
}
}
catch (error:Error)
{
trace(error.toString());
}
“imagePaths”保存JSON对象,以便稍后可以构建图像的路径。据我所知JSON.decode返回一个当我在一个单独的txt文件中加载完全相同的JSON on localhost时,这个工作正常:
var imagePathLoader:URLLoader = URLLoader(e.target);
imagePaths = JSON.decode(imagePathLoader.data);
错误显然出现在try块中,因此我使用trace(paramObj.toString());
跟踪paramObj变量并获取[object Object]
作为输出。
在我看来,JSON解码函数试图解码字符串[object Object]
而不是对象本身,因此在“对象”的第一个“o”处抛出错误?
我已经尝试过urlencode()来自PHP的JSON,然后作为FlashVars传递,这些建议在http://code.google.com/p/as3corelib/issues/detail?id=119上找到并且JSON.decode(paramObj);
没有.toString()会抛出此错误:
1118:价值的隐性强制 与静态类型对象可能 不相关的类型字符串。
那么,如何将JSON正确传递给.swf并将其在AS3中解码为对象?
提前感谢您提供任何帮助
答案 0 :(得分:4)
This page表明flashvars的正确用法是:
<PARAM NAME=FlashVars VALUE="varname=value">
在您的代码中
<param name="FlashVars" value='[{"index":"0", "path":"image1", "ext":"jpg"},{"index":"1", "path":"image2", "ext":"jpg"},{"index":"2", "path":"image3", "ext":"jpg"}]'/>
所以我猜它应该像
<param name="FlashVars" value='myvariable=[{"index":"0", "path":"image1", "ext":"jpg"},{"index":"1", "path":"image2", "ext":"jpg"},{"index":"2", "path":"image3", "ext":"jpg"}]'/>
然后在Flash代码中,您可以通过
来达到此目的root.loaderInfo.parameters["myvariable"]
或
root.loaderInfo.parameters.myvariable
或者如果你喜欢这种方式
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
然后
paramObj["myvariable"]
或
paramObj.myvariable
。
答案 1 :(得分:1)
感谢您的回复。我昨天也发现了这个问题,但是8h(新用户......)无法回答我自己的问题。我做了什么: 在嵌入swf的HTML文件中:
<param name="FlashVars" value="var=urlencode([{"index":"0", "path":"image1", "ext":"jpg"},
{"index":"1", "path":"image2", "ext":"jpg"},
{"index":"2", "path":"image3", "ext":"jpg"}])"/>
然后在AS3代码中我访问了FlashVars:
var imagePaths:Object;
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
var myFlashVar:String;
var varName:String;
for (varName in paramObj) {
myFlashVar = String(paramObj[varName]);
}
imagePaths = JSON.decode(myFlashVar);
然后像往常一样处理JSON对象..谢谢你的帮助!