0

我最近开始用 Json 和 ajax 搞乱。

我有这个 javascript 代码:

var json = {
    "test": [{
        "number":1,
        "char":"hey",
        "bool":true
    }]
};
$.ajax({
    url: "json.php",
    type: "POST",
    contentType: "application/json",
    data: {json: JSON.stringify(json)},
    success: function(res) {
        $("#box").html(res);
    }
});

几分钟前,这段代码工作得非常好,当我这样做时,echo $json['test']['number'];它返回了1

但是现在这根本不起作用,它说 'json' 索引是 UNDEFINED ,因此我尝试使用contentType: "application/x-www-form-urlencoded",which 确实有效,但我根本无法获取数组项。

如果我不在json_decode()函数中传递 true 参数,我将收到以下错误:

Cannot use object of type stdClass as array

如果我这样做,我不会得到数据,但响应会说“数组”。

这就是我要回应的:

$json = $_POST['json'];
$json = json_decode($json, true);
echo $json['test'][0];

这就是我的 var_dump $json

array(1) {
  ["test"]=>
  array(1) {
    [0]=>
    array(3) {
      ["number"]=>
      int(1)
      ["char"]=>
      string(3) "hey"
      ["bool"]=>
      bool(true)
    }
  }
}

为什么这样做?为什么我不能在不返回数组的情况下从中获取值?

4

1 回答 1

4

鉴于这种:

var json = {
    "test": [{
        "number":1,
        "char":"hey",
        "bool":true
    }]
};

你的 PHP 代码

$json['test']['number'];

如果不是数组,则只会首先起作用。上面,在 JavaScript 中,看起来像:test

json.test.number;

但是test是一个Array;它没有number财产。在 JavaScript 中,这将是找到以下内容的正确方法number

json.test[0].number;

你需要在 PHP 中做同样的事情:

$json['test'][0]['number'];
于 2013-10-12T21:44:00.177 回答