首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过PHP返回使用while循环的ajax

通过PHP返回使用while循环的ajax
EN

Stack Overflow用户
提问于 2016-05-14 11:01:46
回答 2查看 427关注 0票数 0

我有这个阿贾克斯

代码语言:javascript
运行
复制
$.ajax({
                        type: "GET",
                        url: '../connect.php',
                        data: "OrB=" + ajaxsend+"&&IOr="+i,
                        success: function(data)
                        { 
                             var x = $.parseJSON(data);
                             var el='<div class="CommentsAw Comment_Hs">\
                                      <img src="../users/'+x[0]+'">\
                                      <span>'+x[1]+'</span>\
                                      <span class="s2">'+x[2]+'</span>\
                                    </div>'
                                    $(".F_W_comments").html().remove();
                                    $(".F_W_comments").html(el);
                        }
        });

和php

代码语言:javascript
运行
复制
if (isset($_GET['OrB'])) {
        $OB=$_GET['OrB'];
        $I=$_GET['IOr'];
        if ($OB=='OO') {
            $OB='`Date` ASC';
        }else if ($OB=='No') {
            $OB='`Date` DESC';
        }
        $query=$con->query("SELECT id,comment FROM uploads WHERE Rand='$I'");
        $row=$query->fetch_row();
        $Commentsq=$con->query("SELECT * FROM (SELECT * FROM comments WHERE Post_id='$row[0]' ORDER BY $OB LIMIT 4) AS sub ORDER BY `DATE` ASC") or die($con->error);
        while ($CommentRow=$Commentsq->fetch_row()) {
                $CommenterPp=$con->query("SELECT Profile_pic FROM user_opt WHERE Username='$CommentRow[3]'");        
                $CommenterPicture=$CommenterPp->fetch_row();
                $CommenterPp=$con->query("SELECT Username FROM users WHERE Id='$CommentRow[3]'");        
                $CommenterName=$CommenterPp->fetch_row();
                echo json_encode(array($CommenterPicture,$CommenterName,$CommentRow));             
        }
    }

但这让我在控制台上出错了

代码语言:javascript
运行
复制
VM654:2 Uncaught SyntaxError: Unexpected token [ in JSON at position 107
[["5734919677561.jpg"],["Murad"],["1842","3","21","1","2016-05-08 21:56:52"]]                    
                [["5734919677561.jpg"],["Murad"],["1843","GOodm","21","1","2016-05-08 21:56:54"]]                    
                [["5734919677561.jpg"],["Murad"],["1845","re","21","1","2016-05-08 21:56:54"]]                    
                [["5734919677561.jpg"],["Murad"],["1844","re","21","1","2016-05-08 21:56:54"]]                    

我想要的是connect.php从数据库中获取数据,然后将其传递给ajax。但是结果可能没有什么,因为我的代码有一些错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-14 11:05:47

回音几个json编码的字符串并不意味着有效的json。

您需要做的是json_encode您的数据,并echo it 一次性

代码语言:javascript
运行
复制
$commenters = array();    // result array
while ($CommentRow=$Commentsq->fetch_row()) {
    $CommenterPp=$con->query("SELECT Profile_pic FROM user_opt WHERE Username='$CommentRow[3]'");        
    $CommenterPicture=$CommenterPp->fetch_row();
    $CommenterPp=$con->query("SELECT Username FROM users WHERE Id='$CommentRow[3]'");        
    $CommenterName=$CommenterPp->fetch_row();
    $commenters[] = array($CommenterPicture,$CommenterName,$CommentRow);             
}
// while loop over
echo json_encode($commenters);

在js中,您应该迭代对象数组,而不是简单的对象,例如:

代码语言:javascript
运行
复制
success: function(data) {
    var x = $.parseJSON(data);
    for (var k in x) {
        console.log(x[k]);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-05-14 11:06:28

删除数组中的数据片刻后,得到的JSON结构如下:

代码语言:javascript
运行
复制
[][][][]

这是无效的JSON。解析器需要一个对象或数组,而不是像这样连接在一起的几个数组。

与其在循环中输出响应,不如构建总响应,并在循环之后输出一次。基本上,在PHP循环之前创建一个空数组,然后将元素推到循环中的数组上,然后在循环后回显JSON编码的数组。

我的PHP非常生疏,但是在PHP伪代码中,它的结构如下:

代码语言:javascript
运行
复制
$result = array();
while ($CommentRow=$Commentsq->fetch_row()) {
    // other code...
    $result[] = array($CommenterPicture,$CommenterName,$CommentRow);
}
echo json_encode($result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37225813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档