2016-05-14 139 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

我知道我只是說接受他的回答會更公平 –