2010-05-20 9 views
0

j'ai cette fois du mal à comprendre ce qu'il faut pour le faire, j'utilise URLVariables pour envoyer/valeurs recieve entre Flash et PHPen utilisant des tableaux imbriqués par php http_build_query() et les recevoir en flash AS3

le problème est, je ne peux pas accéder à des tableaux imbriqués (de tableau dans un tableau) avec flash

voici un exemple:

dgresult de $ = array ("total" => résultats $); echo http_build_query ($ dgresult, "flf_"); En flash, tout ce que j'ai besoin de faire est d'utiliser: var variables: URLVariables = new URLVariables (e.target.data);

alors je peux y accéder avec: variables.total

le problème est maintenant quand j'ai tableaux imbriqués:

$ dgresult = array ("total" => résultats $); array_push ($ dgresult, $ another_array); http_build_query ($ dgresult, "flf_");

je peux encore accéder variables.total

mais qu'en tout ce qui a flf_? comment est-ce possible?

Répondre

1

Vous devriez essayer d'utiliser simplement des formats établis pour des données complexes, telles que JSON. Pour PHP, voir here et pour AS3, voir here. Ou des solutions prêtes à l'emploi telles que AMFPHP.

greetz
back2dos

+0

droit, j'ai utilisé les fonctions de JSON pour améliorer la production à un niveau acceptable dans Flash. Merci. – Mahmoud

0

ou vous pouvez juste analyse de l'objet

var url:String = 'http://localhost/dump.php'; 
var params:Object = { 
    test: 'ok', 
    nested_1: { 
     nested_2: { 
      nested_3: { 
       nested_4: { 
        hello: 'mf', 
        str: '[email protected]#$%^&*()_+' 
       } 
      } 
     } 
    }, 
}; 

var request:URLRequest = new URLRequest(url); 
var variables:URLVariables = new URLVariables(); 

parameters = fixParameters(parameters || {}); 

for (var key:String in parameters) { 
    variables[key] = parameters[key]; 
} 

request.data = variables; 

var loader:URLLoader = new URLLoader(); 
loader.load(request); 

et voici méthode fixParameters

private function fixParameters(data:Object, parameters:Object = null, prefixes:Array = null):Object { 
    var setPrefix:Array; 
    var prefixKey:String; 

    if (!parameters) { 
     parameters = {}; 
    } 

    if (!prefixes) { 
     prefixes = []; 
    } 

    for (var key:String in data) { 
     setPrefix = prefixes.concat([key]); 

     if (typeof(data[key]) == 'object') { 
      parameters = fixParameters(data[key], parameters, setPrefix); 
     } else { 
      prefixKey = ''; 
      for (var i:Number = 0; i < setPrefix.length; i++) { 
       prefixKey += i == 0 ? setPrefix[i] : '[' + setPrefix[i] + ']'; 
      } 
      parameters[prefixKey] = data[key]; 
     } 
    } 

    return parameters; 
} 
Questions connexes