AJAX Json使用for循环从PHP获取数据

时间:2016-05-14 14:48:29

标签: php json ajax

我有这个AJAX

SELECT id,Description
FROM sample_for
WHERE CHARINDEX('@', Description) > 0

这个php

$.ajax({
    type: "GET",
    url: '../connect.php',
    data: "OrB=" + ajaxsend+"&&IOr="+i,
    success: function(data)
    { 
        var x = $.parseJSON(data);
        for (var i = 0; i <= 4; i++) {
            var el='<div class="Ordb">\
            <img src="../users/'+x[i][0]+'">\
            <span>'+x[i][1]+'</span>\
            <span class="s2">'+x[i][2]+'</span>\
            </div>'
            $(".F_W_comments").children().remove();
            $(".F_W_comments").html(el);
        } 
    }
});

我的问题是AJAX在控制台中给我错误

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 comments WHERE Post_id='$row[0]' ORDER BY $OB LIMIT 4") or die($con->error);
    $commenters = 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[1]); 
    }
    echo json_encode($commenters);
}

指着这一行

Uncaught TypeError: Cannot read property '0' of undefined

此外我得到1个元素而不是4.Have我的代码中有任何错误,因为它工作错误

1 个答案:

答案 0 :(得分:0)

首先,更改您的JavaScript。在循环遍历数组时,切勿硬编码for循环的长度。使用i&lt; x.length而不是i <= 4.顺便说一句; i&lt; = 4循环5次,所以如果你期望一个长度为4的数组回来,你仍然会超过数组的长度;这将抛出相同的错误(未定义)。

我不知道为什么你的PHP脚本只返回1个元素,我看不到你的数据库。如果在分配x后立即放置console.log(x),您将在浏览器控制台中看到结果。

我也建议您将PHP代码中的值放在关联数组中,这会使客户端返回的JSON更好地读取(并且不易出错):

$commenters[] = array('picture' => $CommenterPicture, 'name' => $CommenterName,.....);