2

我正在努力通过 FlashVars 将 JSON 对象传递给 .swf 并在 AS3 中解码 JSON FlashVars,并希望您能帮助我。

问题:JSONParseError: Unexpected o encountered当我尝试解码 FlashVars 时,我得到一个。

情况:

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 代码(已导入 as3corelib)解码 main.as 文件中的 FlashVars:

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 对象,以便稍后可以构建图像的路径。据我了解,当我从一个单独的 txt 文件在 localhost 上加载完全相同的 JSON 时,JSON.decode 返回一个 This 工作正常:

var imagePathLoader:URLLoader = URLLoader(e.target);
imagePaths = JSON.decode(imagePathLoader.data);

该错误显然发生在 try 块中,因此我使用并跟踪 paramObj 变量trace(paramObj.toString());并将[object Object]其作为输出。在我看来,JSON decode 函数试图解码字符串[object Object]而不是对象本身,因此在“object”的第一个“o”处引发错误?

在作为 FlashVars 传递之前,我已经尝试从 PHP 中对 JSON 进行 urlencode(),在http://code.google.com/p/as3corelib/issues/detail?id=119上找到的建议并没有JSON.decode(paramObj);抛出 .toString()这个错误:

1118:将具有静态类型 Object 的值隐式强制转换为可能不相关的 String 类型。

那么,如何将 JSON 正确传递给 .swf 并在 AS3 中将其解码为对象?

提前感谢您的帮助

4

2 回答 2

4

这个页面显示了 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"}]'/>

然后在闪存代码中,您可以通过

root.loaderInfo.parameters["myvariable"]

或者

root.loaderInfo.parameters.myvariable

或者如果你喜欢这种方式

var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;

然后

paramObj["myvariable"]

或者

paramObj.myvariable.

于 2011-04-22T16:01:16.990 回答
1

感谢您的回复..我昨天也发现了这一点,但无法回答我自己的问题 8 小时(新用户..)。我做了什么:在嵌入 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对象..感谢您的帮助!

于 2011-04-23T21:46:47.080 回答