我将JSON编码的URL传递给通过我的flash程序生成的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
在php结束
$jsonString = urldecode($_POST['myObject']);
$jsonString = str_replace("\\", "", $jsonString);
$data = JSON_decode($jsonString);
print_r($data);
但我什么都不知道我在这里做错了什么?
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);
帮助!!任何人?
答案 0 :(得分: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”是......那么......不在输出中,那么这不是你的问题。
希望这有帮助!
答案 1 :(得分: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而不是使用trace的值。
答案 2 :(得分: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问题。如果是这样,我很抱歉,但我无法帮助你。
答案 3 :(得分:0)
我用这种方式解码我的json编码数据..
$data = urldecode(utf8_decode(stripslashes($_REQUEST['data'])));
$decoded_result = json_decode($data);
btw:您是否在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);
?>
在firebug中生成以下“响应”视图
Array
(
[0] => stdClass Object
(
[username] => jjj
[fullname] => jon jay junior
[role] => ADMIN
)
)
希望这会有所帮助.. 最善良