【问题标题】:Looping over JSON (Adding HTML)在 JSON 上循环(添加 HTML)
【发布时间】:2014-05-15 19:01:08
【问题描述】:

我正在尝试遍历 PHP 的 JSON 输出并为每个索引分配一个列表项。

我有两个不同的问题。

  • 编码会在不需要时添加奇怪的斜杠和引号。
  • 即使从测试 php 数组设置,解析 JSON 字符串时也会出现类型错误(无效参数)。

PHP

$data= json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
echo json_encode($data);

JSON

"[
    {\"id\":\"1\",\"user_id\":\"1\",\"message\":\"MSG 1\"},
    {\"id\":\"2\",\"user_id\":\"1\",\"message\":\"MSG 2\"},
    {\"id\":\"3\",\"user_id\":\"1\",\"message\":\"MSG 3 \"},
]"

jQuery

  $.ajax({ url: 'chat.php',
    dataType: 'json',
    type: 'post',
    error: function(statusCode, errorThrown) {
                updateError(statusCode, errorThrown);
            },
    success: function(data){

         $.each(data, function() {
                $.each(this, function(k, v) {
                    $('<li data-msgid="'+data.id+'">' + data.user_id + '::' + data.message + '</li>').appendTo('#chat_area');
                 });
            });

        }

});

我使用 ajax 调用而不是 json,因为我最终将在同一个函数中传递数据。 非常感谢任何帮助。

【问题讨论】:

  • 由于 JSON 使用双引号来包含字符串,因此需要使用反斜杠来转义双引号。如果需要,您可以替换它们,但在我看来,这就是将字符串插入数据库的方式
  • 字符串不包含数据库中的引号。其他 json 调用正在正确输出,但是,它们是输出中的单个索引。

标签: php jquery mysql json


【解决方案1】:

您正在编码两次:

$data= json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
echo json_encode($data);

去掉第一个,只对最终数据进行编码:

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
...
echo json_encode($data);

【讨论】:

  • 修复了斜线问题,但现在它在打印的列表元素上返回 undefined。它得到了当前的结果,只是没有正确打印出来。
  • @Ray 检查内部循环中的变量,至少 data.id 不会存在,因为它会是 data[0].iddata[1].id 等。您可能想要 v 值反而。对内部循环中的变量做一个console.log(),然后使用你需要的。
  • @Ray 顺便说一句,您可能只需要一个.each() 循环:使用内循环语法的外循环现在可以直接访问变量。
  • @jereon 如果我删除第一个循环,我只能访问第一个元素并且无法使用 v var,因为我的数组中有多个“键”。这是用于聊天室的,因此数组中将有多个项目出现。 PHP 使用长轮询(彗星),但仍可能返回多个项目。我将如何进行这项工作。
  • @Ray 看来你只需要一个循环$.each(data, function(k, v) {然后你就可以访问v.id
猜你喜欢
  • 2013-12-11
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2014-11-12
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多