2016-05-14 140 views
0

我有这个AJAX返回AJAX通过PHP while循环

$.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

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));    
     } 
    } 

但它给我的错误控制台这样一个

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。 但结果是没有可能是因为我的代码中有一些错误

回答

1

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

你需要做的是json_encode你的数据和echo一旦

$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,你应该遍历对象,而不是一个简单的对象的数组,例如:

success: function(data) { 
    var x = $.parseJSON(data); 
    for (var k in x) { 
     console.log(x[k]); 
    } 
} 
+0

谢谢,我会接受你的答案在8分钟内 –

0

删除数组中的片刻的数据,生成的JSON是结构化像这样:

[][][][] 

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

代替在循环中输出响应,建立总响应并在循环后输出一次。基本上在PHP的while循环之前创建一个空数组,然后将元素推入循环中的数组,然后在循环后回显JSON编码的数组。

我的PHP是非常生疏,但在PHP-ISH伪代码将它的结构是这样的:!

$result = array(); 
while ($CommentRow=$Commentsq->fetch_row()) { 
    // other code... 
    $result[] = array($CommenterPicture,$CommenterName,$CommentRow); 
} 
echo json_encode($result); 
+0

@u_mulder已经给了这个答案:) –

+1

@TomOdell:在堆栈溢出时同时给出类似的答案并不罕见。我们并不真正相互协调。 – David

+0

我知道我只是说接受他的回答会更公平 –