【问题标题】:php json_encode doesn't result in real object / make array string into real object / turn php array into jsonphp json_encode 不会生成真实对象/将数组字符串变为真实对象/将 php 数组转换为 json
【发布时间】:2011-05-16 15:36:52
【问题描述】:

这是我的 PHP 代码,它从 mongodb 获取集合列表

$list = $db->dbname->listCollections();
$result = array();
$i=0;
foreach ($list as $thiscollection) {
    $result[$i++] = $thiscollection->getName();
}
echo json_encode( $result );

我在回调中执行 console.log,这就是我所看到的。

["fruits", "dogs", "cars", "countries"]

问题是这是一个字符串,而不是一个数组。我需要遍历这些值。我如何把它变成一个真实的对象或让 php 给我 json 而不是 php 数组,这样我就可以在它上面使用 parseJSON。

谢谢。

js:

$.post('/ajax-database.php', function (data) {
    console.log($.parseJSON(data));
    $.each(data, function (key, value) {
        console.log(value);
    });
});

【问题讨论】:

  • 如果控制台打印出来,它一个数组。
  • @timdream isArray 说不是。当我尝试在其上运行 $.each 时,我得到了每个字符,包括括号和引号。
  • 那是有线的。你能发布你的Javascript函数吗?也许header('Content-Type: text/javascript'); 之前echo 以确保jQuery 将数据解释为json?
  • @timdream 在帖子末尾添加“json”作为数据类型就可以了。我想我不明白它是如何工作的,我认为 parseJSON 做了同样的事情?布雷格。

标签: php jquery ajax arrays mongodb-php


【解决方案1】:

我看到您正在使用 jquery,如果您希望数据作为 json 对象返回给您,您需要做 2 件事中的 1 件事。

  1. 将 header("Content-Type: application/json") 添加到您的 php 文件中,这将告诉 jquery 将其转换为 json 对象而不是文本

  2. 在 $.post 中添加第四个参数,

$.post('/ajax-database.php', function (data) { console.log($.parseJSON(data)); $.each(数据,函数(键,值){ 控制台.log(值); }); }, "json");

如果它不是 json,它将告诉 jquery 调用您的错误处理程序,例如如果您的 php 代码失败并改为输出 html。你真的应该使用 $.ajax,我不知道为什么有人使用 $.post,你不能做任何有意义的错误处理。

【讨论】:

  • 如果一个带有 jQ​​uery.post() 的请求返回一个错误代码,除非脚本也调用了全局的 .ajaxError() 方法,否则它将静默失败。 - api.jquery.com/jQuery.post
  • 是的,我知道,我只是认为在这方面全局处理错误是不好的做法,因为每个不同的脚本可能而且可能会出现不同的错误。
【解决方案2】:

JSON 字符串。如果您希望能够对其进行迭代,则需要对其进行解码。

【讨论】:

  • 是的,但问题是它不是 json。它有方括号。
  • 是的。顶部值不需要是对象。
  • @Mark: 记住 [] 只是表示 Array,所有 javascript 中的数组都是对象,它们都有原型。
  • 具体来说,JSON 中的最高值可以是 value 构造中的任何东西:json.org
  • 问题是问如何解码我得到的字符串。我可以在字符串上运行 parseJSON,假数组中的值变成了 json 对象,但我仍然无法遍历整个数组。设置数据类型后,假数组变成了真实对象。我对这个答案很困惑。
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多