1

我想在我的 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 对象的任何部分

4

3 回答 3

1

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

var flashvars = "{xmlFile:'myFile.xml',
                  preface:'Preface',
                   {
                    'url': 'flash/someflash.swf',
                    'x': '375',
                    'y': '237'
                   }
                 }";
于 2011-01-19T00:15:09.157 回答
1

Flashvars 作为名称/值对的集合传递,其格式与 GET 或 POST(url 编码)参数相同。因此,对于名称和值,您需要将内容作为字符串,并正确转义。除了对容易出错的 JSON 字符串进行硬编码之外,您还可以将数据写入 php assoc 数组,然后将其编码为 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; ?>'
                };

附言

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

于 2011-01-19T00:42:49.047 回答
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] );
}
于 2011-01-19T02:47:43.567 回答