2

FlashVarsを介してJSONオブジェクトを.swfに渡し、AS3でJSON FlashVarsをデコードするのに苦労しており、あなたが私を助けてくれることを望んでいました。

問題:JSONParseError: Unexpected o encounteredFlashVarsをデコードしようとすると、が表示されます。

状況:

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は、Webスペースの同じフォルダーにあります

次に、この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はこれを返します。これは、ローカルホストにまったく同じJSONを別のtxtファイルからロードしたときに正常に機能しました。

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

エラーは明らかにtryブロックで発生するため、paramObj変数をトレースして出力としてtrace(paramObj.toString());取得[object Object]しました。[object Object]JSONデコード関数は、オブジェクト自体ではなく文字列をデコードしようとしているため、「オブジェクト」の最初の「o」でエラーをスローしているように見えますか?

FlashVarsとして渡す前に、PHPからJSONをurlencode()しようとしました。提案は、http:JSON.decode(paramObj); //code.google.com/p/as3corelib/issues/detail?id = 119にあり、 .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 に答える