json在flashvars中

时间:2011-01-18 20:26:05

标签: actionscript-3 json flashvars

我想在我的flashvars中使用josn而我遇到了麻烦

这是我的json

var flashvars = { 
                xmlFile: '<?php echo $preface.$xmlpath; ?>',
                preface: '<?php echo $preface; ?>',
                "preload": {
                    "url": "flash/someflash.swf",
                    "x": "375",
                    "y": "237"
                }
                };

这是我一直在尝试的事情

    var jsondata:String  = this.loaderInfo.parameters.preload;
    if(jsondata){
        //var jsonData:Object = JSON.decode(jsondata.toString()) ;

     error_txt.text = jsondata.toString();
    }

error_txt返回“object Object”但我无法访问json对象的任何部分

3 个答案:

答案 0 :(得分:1)

我相信这里发生的事情是Javascript在你的flashvars变量上调用.toString()并将结果字符串传递给flash。如果我的预感是正确的,你需要将JSON作为字符串传递给她。

var flashvars = "{xmlFile:'myFile.xml',
                  preface:'Preface',
                   {
                    'url': 'flash/someflash.swf',
                    'x': '375',
                    'y': '237'
                   }
                 }";

答案 1 :(得分:1)

Flashvars作为名称/值对的集合传递,格式与GET或POST(url编码)参数相同。因此,对于名称和值,您需要将内容作为字符串进行正确转义。除了对JSON字符串进行硬编码(这有点容易出错)之外,您可以在php关联数组中编写数据,然后将其编码为JSON,然后对其进行url编码。结果字符串将作为值传递。

这样的事情(我实际上没有测试过这个片段!)

<?php
$preload_data = array(
     "url"      => "flash/someflash.swf",
        "x"     => "375",
        "y"     => "237"
); 
$preload_flashvar = rawurlencode(json_encode($preload_data));
?>

var flashvars = { 
                xmlFile: '<?php echo $preface.$xmlpath; ?>',
                preface: '<?php echo $preface; ?>',
                preload: '<?php echo $preload_flashvar; ?>'
                };

<强> PS

第二个想法,SWFObject(你似乎用来嵌入swf)很可能会为你逃避url(通过encodeURIComponent或一些自制函数);我不记得是不是这样,但如果是这样的话,你不必在你的php代码中调用rawurlencode,因为你的数据会被urlencoded两次。我现在无法测试这个,但是在php中尝试使用和不使用url-encoding进行测试;其中一个应该工作正常。

答案 2 :(得分:0)

你在哪里实际使用/需要JSON?...

var flashvars = { 
            xmlFile: '<?php echo $preface.$xmlpath; ?>',
            preface: '<?php echo $preface; ?>',
            preload: {
                       url: "flash/someflash.swf",
                       x: "375",
                       y: "237"
                      }
            };


//in AS3
var params:Object  = this.loaderInfo.parameters;

if(params != null)
{
  var preload:Object = params.preload;

  for( var name:String in preload )
      trace( preload[name] );
}