JSON во Flashvars - PullRequest
       26

JSON во Flashvars

1 голос
/ 18 января 2011

Я хочу использовать josn в моих flashvars, и у меня возникают проблемы

вот мой 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 возвращает «объектный объект», но я не могу получить доступ ни к какой части объекта json

Ответы [ 3 ]

1 голос
/ 19 января 2011

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; ?>'
                };

PS

Если подумать, вполне вероятно, что SWFObject (который вы, кажется, используете для встраивания SWF-файла) выполняет экранирование URL (через encodeURIComponent или какую-то самодельную функцию);Я не помню, так ли это, но если это так, вам не нужно вызывать rawurlencode в вашем php-коде, так как ваши данные будут дважды закодированы в urlencoded.Я не могу проверить это прямо сейчас, но попробуйте с и без url-кодировки в php;один из двух должен работать нормально.

1 голос
/ 19 января 2011

Я считаю, что здесь происходит то, что Javascript вызывает .toString () для вашей переменной flashvars и передает полученную строку во flash. Если моя догадка верна, вам нужно будет передать JSON в виде строки, подобной этой.

var flashvars = "{xmlFile:'myFile.xml',
                  preface:'Preface',
                   {
                    'url': 'flash/someflash.swf',
                    'x': '375',
                    'y': '237'
                   }
                 }";
0 голосов
/ 19 января 2011

Где вы на самом деле используете / нуждаетесь в 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] );
}
...