object_to_array和encode - php to js opbject

时间:2015-09-17 21:28:48

标签: javascript php jquery ajax

我向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;
}

*我从其他问题中删除了该网站的功能..

请建议=]

此致 拉斐尔。

3 个答案:

答案 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)中的数组正在进行说话而不是数组吗?多数民众赞成我认为呢?或者我是否在漫步(再次)?