2010-12-01 18 views
0

Ich bin ein JSON-kodierte URL übergeben mein Flash-Programm auf PHP erzeugt durchnicht in der Lage JSON zu dekodieren

Hier ist das, was ich bekomme, wenn ich

myObject=%5B%7B%22fullname%22%3A%22jon%20jay%20junior%22%2C%22role%22%3A%22ADMIN%22%2C%22username%22%3A%22jjj%22%7D%5D 

am php Ende

eine Spur tun
$jsonString = urldecode($_POST['myObject']); 
$jsonString = str_replace("\\", "", $jsonString); 
$data = JSON_decode($jsonString); 
print_r($data); 

aber ich bekomme nichts, was mache ich hier falsch?

Code in Flash

var people:Array = new Array(); 
var person:Object = new Object(); 
var url:String = "http://localhost/ping.php"; 
var request:URLRequest = new URLRequest(url); 
var requestVars:URLVariables = new URLVariables(); 
var loader:URLLoader = new URLLoader(); 
person.fullname = "jon jay junior"; 
person.username = "jjj"; 
person.role = "ADMIN"; 
people.push(person); 
request.method = URLRequestMethod.POST; 
requestVars.myObject = JSON.encode(people); 
request.data = requestVars; 
loader.load(request); 
trace(request.data); 

Hilfe !! Irgendjemand?

+0

tun Sie kodieren es richtig, wenn Sie die Daten durch Blitz senden? Was passiert, wenn Sie die Dekodierleitung entfernen? – Breezer

+0

kann ich den Code sehen, wo der JSON-String generiert wird und wo er codiert/gesendet wird? – www0z0k

+0

posted den Code über – hitek

Antwort

1
$str = "%5B%7B%22fullname%22%3A%22jon%20jay%20junior%22%2C%22role%22%3A%22ADMIN%22%2C%22username%22%3A%22jjj%22%7D%5D"; 

$jsonString = urldecode($str); 
$jsonString = str_replace("\\", "", $jsonString); 
$data = JSON_decode($jsonString); 
print_r($data); 

Das funktioniert gut. Sind Sie sicher, dass der übergebene Wert ein POST ist? Oder vielleicht wird es nicht dekodiert? Echo den Wert von $ jsonString bei jedem Schritt. Wenn Sie Firebug verwenden, können Sie das Net-Panel untersuchen, um die Werte anzuzeigen, die an den PHP gesendet werden, anstatt Trace zu verwenden.

+0

Ich habe gerade den Code für die Flash-Seite bitte überprüfen Sie – hitek

3

Es ist durchaus möglich, dass die JSON-Erweiterung nicht installiert/aktiviert ist und Ihre php.ini-Datei Fehler unterdrückt. Wenn Sie json_decode() an anderen Orten verwenden, dann ignorieren Sie alles, was ich sagen werde.

Wenn Sie nicht sicher sind, und wollen zu sehen, zu überprüfen, ob die JSON-Erweiterung nur diesen Code-Schnipsel in eine neue PHP-Datei Pop installiert ist, und zeigen Sie in Ihrem Browser:

The JSON extension is <?php print (! in_array('json', get_loaded_extensions())) ? 'NOT' : '' ?> installed and enabled. 

Wenn Sie das bekommen Meldung "Die JSON-Erweiterung ist NICHT installiert und aktiviert.", das ist Ihr Problem. Wenn das Wort "NICHT" ... nun ... NICHT in der Ausgabe steht, dann ist das nicht dein Problem.

Hoffe, das hilft!

+0

Ich benutze JSON_decode anderen Orten und es funktioniert gut ... Ich bin nur mit der Codierung Teil hier stecken und ich weiß nicht warum :(?? – hitek

0

Nun, da mein erster Gedanke, eine Büste war, versuchen Sie dies:

$jsonString = urldecode($_POST['myObject']); 
print '1: ' . $jsonString . '<br />'; 
$jsonString = str_replace("\\", "", $jsonString); 
print '2: ' . $jsonString . '<br />'; 
$data = JSON_decode($jsonString); 
print_r($data); 

Sehen Sie, wenn Sie eine Ausgabe von entweder 1 # bekommen oder # 2. Wenn Sie nichts von # 1 erhalten, ändern Sie $_POST zu $_REQUEST und versuchen Sie es. Wenn du nichts von DIR bekommst ... dann muss ich sagen, dass es ein Flash-Problem ist. Wenn das der Fall ist, tut es mir leid, aber ich kann dir nicht helfen.

Viel Glück!

0

ich bin Decodierung meine Json codierten Daten auf diese Weise ..

$data = urldecode(utf8_decode(stripslashes($_REQUEST['data']))); $decoded_result = json_decode($data);

btw: Haben fügen Sie den entsprechenden Event-Handler Ihre URLLoader-Instanz?

[update] Hier ist ein Beispiel, das für mich funktioniert ..

//loader event handler 
function ioHandler (evt:IOErrorEvent): void { trace("IOError: "+ evt.text); } 
function httpHandler (evt:HTTPStatusEvent): void { trace("HTTPStatus: "+ evt.status); } 
function completeHandler (evt:Event): void { trace(complete"); } 

var person:Object = new Object(); 
    person.fullname = "jon jay junior"; 
    person.username = "jjj"; 
    person.role = "ADMIN"; 

var people:Array = new Array(); 
    people.push(person); 

var vars: URLVariables = new URLVariables(); 
    vars.data = JSON.encode(people); 

var request:URLRequest = new URLRequest(); 
    request.url   = "http://localhost/data.php"; 
    request.data  = vars; 

var loader:URLLoader = new URLLoader(); 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.addEventListener(Event.COMPLETE, completeHandler); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, ioHandler); 
    loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpHandler); 
    loader.load(request); 

und für die serverseitige, dieses Skript

//the server side 

<?php 

$data = urldecode(utf8_decode(stripslashes($_REQUEST['data']))); 

$decoded_result = json_decode($data); 

print_r($decoded_result); 

?> 

, die in Firebug die im Anschluss an die "Antwort" Ansicht erzeugt

Array 
(
    [0] => stdClass Object 
     (
      [username] => jjj 
      [fullname] => jon jay junior 
      [role] => ADMIN 
     ) 

) 

hoffe, das hilft .. gütigste

+0

Ja Ich benutze den Event-Handler und die Ablaufverfolgung zeigt die Ausgabe auf der Flash-Seite, aber ich bekomme nichts während der Decodierung in PHP – hitek

+0

hast du es versucht? –

+0

Ich bekomme diesen Fehler im Flash nach, wenn Sie Ihren Code verwenden und versuchen, das zurückzugeben Wert zurück zu blinken TypeError: Fehler # 1034: Type Coercion fehlgeschlagen: kann nicht konvertieren flash.events::[email protected] to flash.events.HTTPStatusEvent – hitek