【问题标题】:return json from php and handle从php返回json并处理
【发布时间】:2013-09-20 18:26:53
【问题描述】:

我从 ajax 调用中得到这个

{"id":"381120774951940096","time":"Posted 0 minutes and 51 seconds ago.",....

如何将这些中的每一个添加到变量、id、时间等中? data.id 不起作用,它显示 undef。

<script>
$(function() {
        $.ajax({
            type: "POST",
            url: "start.php",
            cache: false,
            success: function(data) {
                console.log(data.name);
                console.log(data);
            }
        })
    });
</script>

这是我从 start.php 返回的内容

$return = array('id' => $info['id_str'] ,'time' => timeDiff(new DateTime($info['created_at'])), 'name' => $info['user']['name'], 'text' => $info['text'], 'image' => $picture, 'url' => "http://twitter.com/{$info['user']['screen_name']}");

print_r(json_encode($return));

编辑 我在 foreach 循环中有那个 print_r,这就是问题所在。所以我添加了另一个数组并在文件末尾使用了 echo json_decode($array,true)。写这个以防万一,可能会对某人有所帮助。

干杯

【问题讨论】:

  • 为什么是 print_r? echo 非常好!
  • 我只是习惯了print_r。

标签: php jquery json


【解决方案1】:

首先,在您的 PHP 中,将您的行更改为:

echo json_encode($return, true);

第二个参数确保 JSON 可解释为关联数组。另外,在返回 JSON 时,您应该使用 echo 而不是 print_rprint_r 可以改变格式。

接下来,使用以下 AJAX 调用:

$.ajax({
    type: "POST",
    url: "start.php",
    dataType: "json", // Add this option.
    cache: false,
    success: function(data) {
        console.log(data.name);
        console.log(data);
    }
})

dataType: "json" 选项确保data 在检索到后立即被解析为 JSON 对象。因此,data.id 应该立即在您的 success 回调函数中可用。

希望这会有所帮助!

【讨论】:

  • 当我在 ajax 调用中添加 dataType: "json" 时,控制台日志中没有任何内容。我试图在 php 文件中将标头设置为 json,结果相同。
  • 您确定切换到echo 而不是print_r
  • 另外,将 ob_end_clean(); 放在 echo 之前,将 exit; 放在后面会有所帮助。
  • @MightyPork 这帮了大忙!我在 foreach 循环中有回声,这就是问题所在。
【解决方案2】:

首先,您应该在服务器脚本中使用echoprint_r主要用于调试数组。

其次,您应该为 ajax 调用声明一个dataType 选项:

$.ajax({
    dataType: "json", // <-- here
    type: "POST",
    url: "start.php",
    cache: false,

    success: function(data) {
        console.log(data.name);
        console.log(data);
    }
});

按照你现在的方式,我认为你得到了一个字符串响应作为数据。

您可以使用console.log(JSON.stringify(data)); 进行验证

【讨论】:

    【解决方案3】:

    您必须在 ajax 中设置 dataType: 'json'。这意味着 jQuery 会将结果解析为 JSON。

    然后解析数据,

     data = $.parseJSON(data);
    

    然后阅读var id = data.id;

    另外,在你的 PHP 中,不需要使用 print_r()。只需使用 echo 代替 print_r().like:

    echo json_encode($return);
    

    【讨论】:

      【解决方案4】:

      您需要将 JSON 字符串解析为一个对象。您可以使用JSON.parse 来执行此操作。

      // Your JSON string
      var json_str = "{'id': 'foo', 'time': 'bar'}";
      
      // We need to parse it, converting it into a JS object
      var json_obj = JSON.parse(json_str);
      
      // We can now interact with it
      console.log(json_obj.id);
      console.log(json_obj.time);
      

      或者,您可以使用内置的 jQuery 函数 parseJSON() 解析 JSON。

      jQuery 还有一个内置函数用于获取 JSON,称为 getJSON()。如果有记忆,这只是进行.ajax() 调用并指定json 数据类型的简写。这将为您处理上述(解析 JSON),并且是推荐的解决方案。

      【讨论】:

      • jQuery 为你做这件事,只需定义一个 dataType 参数。您正在解决一个原本不应该发生的情况 - 这种方法是错误的。
      • 另外,var json_str = {"... 不是字符串。
      • 我很明显地指出应该在我的帖子底部设置dataType。指出了根本原因,并在顶部作为完整性问题进行了处理(即,这就是它崩溃的原因)。我将授予您最后一点并相应更新。
      猜你喜欢
      • 2011-03-12
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2021-05-13
      • 2021-03-27
      • 1970-01-01
      相关资源
      最近更新 更多