我向AjaxHandler.php页面发送Ajax调用,AjaxHandler页面调用Functions.php中的其他函数(其他页面)。
成功后我需要从AjaxHandler.php返回对象,该对象需要有2个参数。
这是ajax调用:
var month_number = document.getElementById("Month").innerHTML;
var year_number = document.getElementById("Year").innerHTML;
$.get("AjaxHandler.php", { "year": year_number, "month": month_number }, function (encodedata) {
var data = JSON.parse(encodedata);
$("#LinesPlace").html(data);
});
这是需要处理的AjaxHandler.php代码:
if(isset($_GET['year'],$_GET['month']))
{
$year = $_GET['year'];
$month = $_GET['month'];
$a = getExpenses($year, $month);
echo $a->pharama;
echo $a->pharamb;
$b = object_to_array($a);
echo $b;
return json_encode($b);
}
现在,当我把那个网址:
http://xxxxxxxxx.com/AjaxHandler.php?year=2015&month=09
它向我展示了pharama和pharamb的回声,但当我尝试将对象转换为数组然后解码它只是不工作时,我尝试了很多但没有。
这是object_to_array函数:
//convert php object to array
function object_to_array($data){
if(is_array($data) || is_object($data))
{
$result = array();
foreach($data as $key => $value) {
$result[$key] = $this->object_to_array($value);
}
return $result;
}
return $data;
}
*我从其他问题中删除了该网站的功能..
请建议=]
此致 拉斐尔。
答案 0 :(得分:2)
如果您需要将JSON解码为数组或对象,json_decode
有一个专门用于此的参数:http://php.net/json_decode
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
...
的 ASSOC 强>
如果为TRUE,则返回的对象将转换为关联数组。
例如:
$json_as_object = json_decode($json, false);
$json_as_array = json_decode($json, true);
尝试手动将对象转换为数组应该是不必要的。
答案 1 :(得分:1)
您需要使用JSON_UNESCAPED_UNICODE进行非常具体的编码,如下所示:
$ jsonObj = json_encode(string $ json,JSON_UNESCAPED_UNICODE);
我在这种事情的标准函数中有这个代码
http://php.net/manual/en/function.json-last-error.php
PS。我认为你在你的对象中检查它到数组函数。我可能会选择以下内容:if(is_array($ param)){..}
答案 2 :(得分:0)
Rafael我不能评论需要50个代表或者什么:D你说:你的意思是不必要的?你的意思是我可以按原样返回对象php?
如果我说的话,你知道你把这些东西放到函数obj_to_array()rigth中的一半了吗?什么进入,它不是一个对象,所以为什么检查它?谁会发送它?你是否预见到$ _POST会把所有人都包裹起来作为一个好的对象并准备好了?通常情况下,表单执行$ _POST / $ _GET并默认提供数组,据我所知?如果你在代码中的其他地方生成一个obj,为什么要把它用作这个函数的输入?你不知道你在代码中的其他地方做了什么吗?当然你做了,只要你简洁精确,它永远不会突然成为$ _POST返回的对象或通常输出数组或整数的任何函数等。检查你的输出,因为你创建它的第一个位置?检查您的Web输入非常好(1次!并且对于js注入),然后只检查您的类型以验证您自己的模糊输出/输入,例如可以产生数组或真/假返回值的输出。对于布尔值的TRUE值,检查此输出的值为1可能会导致失望,因为:
如果($ a)的某个事情是$ a的值是1;那么1可以是作为产生我们正在检查的东西的函数或计数结果($ a)返回的TRUE值。如果我们假设数组长度为1,因为误解了$ a的值,那么这会产生意想不到的结果吗?你想确定它是$ _array($ a)中的数组正在进行说话而不是数组吗?多数民众赞成我认为呢?或者我是否在漫步(再次)?