2010-12-01 4 views
0

Я «м пропусканием JSON закодированный URL в PHP генерируется с помощью моей флэш программыне может декодировать JSON

Вот то, что я получаю, когда я делаю след

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

в конце PHP

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

но я ничего не понимаю, что я делаю неправильно здесь?

код вспышки

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); 

Помощь !! Кто угодно?

+0

сделать вы правильно кодируете его, когда вы отправляете данные через флеш? Что произойдет, если вы удалите строку декодирования? – Breezer 2010-12-01 17:51:28

+0

Могу ли я увидеть код, где генерируется строка JSON и где она закодирована/отправлена? – www0z0k 2010-12-01 17:56:11

+0

отправил код выше – hitek 2010-12-01 18:00:34

ответ

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); 

Это хорошо работает. Вы уверены, что значение прошло через POST? Или, может быть, он не декодируется? Выделите значение $ jsonString на каждом шаге. Если вы используете firebug, вы можете проверить панель Net, чтобы увидеть значения, которые отправляются на php вместо использования трассировки.

3

Вполне возможно, что у вас нет расширения JSON/включено, и ваш файл php.ini подавляет ошибки. Если вы используете json_decode() другие места, то игнорируйте все, что я собираюсь сказать.

Если вы не уверены и хотите проверить, установлен ли расширение JSON просто поп этот код в новый PHP файл и его просмотра в вашем браузере:

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

Если вы получаете сообщение «Расширение JSON не установлено и не включено». Тогда это ваша проблема. Если слово «NOT» ... ну ... НЕ на выходе, то это не ваша проблема.

Надеюсь, это поможет!

0

Ну, так как моя первая мысль была бюст, попробуйте следующее:

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

Смотрите, если вы получите любой выход из любой # 1 или # 2. Если вы ничего не получили от # 1, измените $_POST на $_REQUEST и попробуйте это. Если вы ничего не получите от этого ... тогда я должен сказать, что это проблема с Flash. Если это так, извините, но я не могу вам помочь.

Удачи вам!

0

Я декодирование моего JSON закодированных данных таким образом ..

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

кстати: вы добавил соответствующий обработчик событий для вашего URLLoader например?

[обновление] вот пример, который работает на меня ..

//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); 

и для ServerSide, этот сценарий

//the server side 

<?php 

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

$decoded_result = json_decode($data); 

print_r($decoded_result); 

?> 

, который производит следующий за "ответ" вид в поджигатель

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

) 

надеюсь, что это помогает .. добрейший

Смежные вопросы