Как передать массив из PHP в Actionscript 3 / Flash? - PullRequest
0 голосов
/ 19 июня 2010

Вот что у меня есть в PHP:

for ($i = 0; $i < 355; $i++)
{
    echo "vote";
    echo "$i";
    echo "=$votesArray[$i]";
    if($i != 354)
    {
        echo "&";
    }
}

, который должен отправлять данные во Flash, которые выглядят примерно так: "voice0 = 2 & voice1 = 5 & ..." и т. Д.

Здесьэто сторона Actionscript 3:

var i:int;
for (i = 0; i < 355; i++)
{
    var tempString:String = "vote" + i; 
    voteResults[i] = event.target.data.tempString;
}

Я еще не пытался запустить это, но у меня такое ощущение, что это не сработает.Ты видишь, что я пытаюсь понять?Для каждой итерации цикла for я хотел бы получить данные из другой части event.target.data.Для первой итерации это должно быть event.target.data.vote0.Во-вторых, event.target.data.vote1 и так далее.

Ответы [ 3 ]

3 голосов
/ 19 июня 2010

Я часто использую JSON для взаимодействия при передаче данных с сервера на клиент, даже с Flash.Почти все мои проекты включают as3corelib и среди других функций есть кодировщик / декодер JSON.Я думаю, что легче работать и отлаживать код, используя json, чем AMF (конечно, если у меня много сообщений AMF, так оно и есть), и мне бы очень хотелось, чтобы PHP преобразовывал объект в JSON с собственным кодом

 echo(json_encode($votesArray));

и на стороне клиента:

var votesArray:Array = JSON.decode(jsonString) as Array;

Таким образом, вы не обязаны писать код преобразования в части PHP, и если у вас есть какие-то проблемы, проще отладить, чем двоичный AMF, jsonStringобычная читаемая строка, которая не взрывается, если интерпретатор PHP добавляет предупреждение об ошибке

2 голосов
/ 19 июня 2010

Выезд AMFPHP .Делает передачу данных из PHP во Flash практически без усилий.

AMFPHP - это бесплатная PHP-реализация с открытым исходным кодом формата сообщений действий (AMF).AMF допускает двоичную сериализацию собственных типов ActionScript (AS2, AS3) и объектов для отправки на сервисы на стороне сервера.Перед AMFPHP стоит задача реализовать весь протокол AMF в качестве альтернативы Flex Data Services (AMF3) и Flash Remoting (AMF0).

1 голос
/ 19 июня 2010

Я бы использовал xml для чего-то подобного, но это можно сделать с помощью строк в кодировке URL.

Предполагая, что вы загрузили свои данные с помощью URLLoader и указали dataFormat как URLLoaderDataFormat.VARIABLES , вы близки.

Если у вас есть необработанная строка, вы должны сначала проанализировать ее, чтобы разбить ее на пары имя / значение. Это то, что URLVariables делает.

В любом случае, если у вас есть объект, содержащий имена / значения, вы можете сделать:

var i:int;
for (i = 0; i < 355; i++)
{
    var tempString:String = "vote" + i; 
    voteResults[i] = event.target.data[tempString];
}

Если вы используете точечный доступ, буквально принимает «tempString». Если вы используете скобочный доступ, будет оценено значение переменной tempString.

PS: Кстати, я не думаю, что ваш php будет делать то, что вы хотите. Более чистым способом ИМО будет:

$pairs = array();
for ($i = 0; $i < 355; $i++)
{
    $pairs[] = 'vote' . $i . '=' . $votesArray[$i]; 
    // you might want to use rawurlencode($votesArray[$i]) to be safe if these are not numeric values.
}
echo implode('&',$pairs);

PS 2: Кроме того, это довольно хрупко, так как вы жестко программируете 355. Если вы когда-нибудь измените свой php, вам придется также изменить свой код AS. Вы можете попробовать что-то вроде этого:

var data:URLVariables = event.target.data as URLVariables;
for(var fieldName:String in data) {
    var index:int = parseInt(fieldName.substr(4));
    //  or optionally, add an underscore to the name: vote_1
    //  so you can change the above to something like
    //  fieldName.split("_")[1]
    voteResults[index] = data[fieldName];
}

Или, как я уже говорил, вы можете использовать xml, который достаточно прост и, я думаю, лучше для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...