2010-12-01 22 views
0

我是通過一個JSON編碼的URL解碼到PHP通過我的Flash程序產生無法JSON

下面是當我在php結束

做一個跟蹤

myObject=%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($_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的值。如果您使用螢火蟲,您可以檢查網絡面板查看發送到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,然後嘗試。如果你沒有得到任何東西......那麼我不得不說這是一個閃存問題。如果是這樣的話,我很抱歉,但我幫不了你。

祝你好運!

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

併爲服務器端,這個腳本

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

) 

希望這有助於.. 最善良