【问题标题】:how to loop through json response data using ajax jquery?如何使用ajax jquery遍历json响应数据?
【发布时间】:2021-03-15 18:05:56
【问题描述】:

我正在尝试使用 ajax jquery 循环遍历 json 响应,但无法显示结果。

这是我使用的代码:

data.php

function platformsList(){
    $query = "SELECT id, name, slug, icon FROM `platforms` ORDER BY id ASC";
    $statement   = $GLOBALS['PDO']->prepare($query);
    $statement->execute();
    $data = array();
    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
        $data[] = $row;
    }
    return json_encode($data);
}
if(isset($_GET['platforms']) AND $_GET['platforms'] == 'platforms'){
    $platforms = platformsList();
    $response = json_decode($platforms);
    print_r($response);
}

jquery:

$(document).ready(function(){
        $.ajax({
            url: "core/data.php",
            method: "GET",
            data :'platforms=platforms',
            dataType: 'json',
            contentType: false,
            cache: false,
            processData: false,
            success: function(response) {
                for(var i = 0; response.length < i; i++) {
                    $('.platformsList').html('<li>'+response.name+'</li>');
                }
            }
        })
    });

我想要的是在下面的 div 中显示结果:

<div>
    <ul class="platformsList"></ul>
</div>

编辑:

当我调试时,我得到了这个结果:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] =>  Platform 1
            [slug] => dates
            [icon] => dates.webp
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => Platform 2
            [slug] => honey
            [icon] => honey.webp
        )
.
.
... etc

【问题讨论】:

  • 这会以什么方式失败?调试的时候response变量的内容是什么?
  • 我已经编辑了帖子
  • 可能需要检查无序列表的正确格式&lt;ul class="platformsList"&gt;&lt;/li&gt; ??
  • 大声笑,只是一个错字
  • 这里的问题是我无法在html页面中显示结果

标签: php jquery json ajax


【解决方案1】:

您将在每次迭代中替换 .platformsList 的内容。您需要创建缓冲区或使用append()

success: function(response) {

    let buffer = '';

    for (var i = 0; response.length < i; i++) {

        buffer += '<li>'+response[i].name+'</li>';

    }

    $('.platformsList').html(buffer);

}

【讨论】:

  • 还是同样的问题。无法显示任何内容
  • @RichardBranson response 似乎是一个数组。我编辑了示例代码。
【解决方案2】:

请注意 i &lt; response.length 而不是 response.length &gt; i
response[i].name 访问数组

success: function(response) {
                for (var i = 0; i < response.length; i++) {
                    $('.platformsList').html('<li>'+response[i].name+'</li>');
                }
            }

【讨论】:

  • 谢谢!它有效,但我使用 .append() 而不是 .html()
  • @RichardBranson 请注意,使用 jquery 的 append() 会不必要地多次更新 DOM。此操作是资源密集型的,并且可能会使您的页面因大型数据集而变慢。建议使用缓冲区。
  • append() 和缓冲区是推荐的,我试图坚持源代码
【解决方案3】:
  1. 不要像那样使用 GLOBALS,而是将其作为参数传递给函数
  2. 如果您没有要绑定到查询的参数,则简单的-&gt;query() 会更简单快捷。
  3. 您想向 AJAX 调用发送 json_encode() JSON 字符串,但您将其解码回 PHP 数组,然后发送 print_r() Javascript 无法理解。
function platformsList($conn){
    $query = "SELECT id, name, slug, icon FROM `platforms` ORDER BY id ASC";
    $result   = $conn->query($query);
    
    $data = $result->fetch_all(MYSQLI_ASSOC);
    
    return $data;
}

if(isset($_GET['platforms']) AND $_GET['platforms'] == 'platforms'){
    $platforms = platformsList($PDO);
    echo json_encode($platforms);
}

而 javascript 需要处理该数组

success: function(response) {
    for(var i = 0; response.length < i; i++) {
        buf += '<li>'+response[i].name+'</li>';
    }
    $('.platformsList').html(buf);
}

【讨论】:

  • 那么 jquery 循环呢?这是正确的吗?因为我仍然没有结果!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多