到PHP和JavaScript中的JSON和json_decode

前端之家收集整理的这篇文章主要介绍了到PHP和JavaScript中的JSON和json_decode 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图通过jquery.ajax()将JavaScript对象传递给PHP脚本,基本上是:

var bigArray = new Object();
//Dode
//Start loop
bigArray[x] = {name: exname,id: exID,order:e,set: setBox,inc: incBox,example: exampleBox,day: i};

因此,几乎是这些对象的数组.

    var anotherTest = $.toJSON(bigArray);
    var ajxFile = "routineajax.PHP";
    $.ajax({
        type: 'POST',processData: false,url: ajxFile,data: anotherTest,success: function(data) {
            $('#result').html(data);
            alert('Load was performed.');
        }
    });
});

PHP辅助脚本

 print_r($_POST);
 $params = json_decode($_POST);
 print_r($params)

Ajax调用正在进行中,我可以在Firebug中看到,但是print_r($_ POST)返回一个空数组.虽然如果我在$.ajax函数PHP脚本中都将其更改为$_GET,则它可以工作.我的主要问题是我收到以下错误消息:

Warning: json_decode() expects parameter 1 to be string,array given in

我该如何解决这个问题?

在将此片段添加PHP文件之后

  $data = file_get_contents('PHP://input');
  var_dump($data);
  var_dump(json_decode($data));

我得到这个输出

string'{"0"{"name":"Decline`Abs","id":"54","order":0,"set":"","inc":"","example":"","day":1}}' (length=87)`
  object(stdClass)[2]
      public '0' =>
        object(stdClass)[4]
          public 'name' => string 'Decline Abs' (length=11)
          public 'id' => string '54' (length=2)
          public 'order' => int 0
          public 'set' => string '' (length=0)
          public 'inc' => string '' (length=0)
          public 'example' => string '' (length=0)
          public 'day' => int 1

因此,至少它正在经历,但我不确定如何访问它,朝着正确的方向迈出了一步!

最佳答案
我认为问题在于,通常POST数据以编码为key = value& key2 = value2的形式发送,而您是以JSON形式发送的.尝试按以下方式访问原始帖子数据:

$data = file_get_contents('PHP://input');
var_dump($data);
var_dump(json_decode($data));

看看是否可行.如果没有,请在您的问题中张贴返回的内容(如有).

基于以下注释和对OP的补充.

$data的var_dump是否正确粘贴复制?我问的原因是:字符串'{“ 0” {“ name”在我看来不正确.那不是有效的JSON或正确编码的POST字符串.复制和粘贴时,可能是某些字符已编码.

无论哪种方式,您现在都可以得到所需的结果. stdClass只是一个空白容器,它将数据放入其中,您可以使用常规对象语法对其进行访问.在这种情况下,您必须做$data-> {0}->名称,因为那个0.如果您做$data = json_decode($data,true),它将是一个关联数组,并且您可以以$data [0] [‘name’]的身份访问POST的数据.

如果您想继续探索,在执行ajax请求之前显示window.console.dir(data)的结果可能会有所帮助,并确保在查看var_dump(data)时查看复制和粘贴页面. window.console.dir(data)将在Firebug窗口中显示数据的属性(您正在使用Firebug,对吗?).它也可以在Chrome的调试器中运行,也许也可以在其他调试器中运行.就像我说的那样,您似乎已经可以获取所需的东西,因此无需进行调查.

猜你在找的jQuery相关文章