Декодировать JSON FlashVars в AS3 - PullRequest
       15

Декодировать JSON FlashVars в AS3

2 голосов
/ 22 апреля 2011

Я пытаюсь передать JSON-объект в .swf через FlashVars и расшифровать JSON FlashVars в AS3 и надеялся, что вы мне поможете.

Проблема: при попытке получить 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перешел на .swf через Flashvars.В 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 находятся в одной папке на веб-пространстве

Затем я пытаюсь декодировать FlashVars в моем файле main.asс этим кодом AS3 (импортирован 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 возвращает. Это сработало нормально, когда я загрузил точно такой же JSON на localhost из отдельного txt-файла с помощью:

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

Ошибка явно возникает в блоке try, поэтому я проследилпеременная paramObj с trace(paramObj.toString()); и получением [object Object] в качестве вывода.Мне кажется, что функция декодирования JSON пытается декодировать строку [object Object], а не сам объект, и поэтому выдает ошибку в первом «o» из «объекта»?

Я уже пытался urlencode () JSON из PHP перед передачей в виде FlashVars, предложения были найдены в http://code.google.com/p/as3corelib/issues/detail?id=119 и JSON.decode(paramObj); без .toString (), которая выдает эту ошибку:

1118: неявное приведение значения со статическим типом Object к возможно не связанному типу String.

Итак, как правильно передать JSON в .swf и декодировать его вAS3 к объекту?

Заранее спасибо за любую помощь

Ответы [ 2 ]

4 голосов
/ 22 апреля 2011

Эта страница показывает, что правильное использование 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.

1 голос
/ 24 апреля 2011

Спасибо за ответы .. Я также узнал об этом вчера, но не смог ответить на свой вопрос в течение 8 часов (новый пользователь ..).Что я сделал: В HTML-файле, который встраивает swf:

<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 как обычно.. спасибо за вашу помощь!

...