2016-05-14 11 views
0

ich diese Ajax bekommen habenZurück zur Ajax mit while-Schleife durch PHP

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

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

Aber es gibt mir Fehler in der Konsole wie diese

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"]]      

Was Ich will ist connect.php, um Daten aus der Datenbank zu bekommen und dann an Ajax übergeben. Aber das Ergebnis war nichts wahrscheinlich, weil es einen Fehler in meinem Code gibt

Antwort

1

Echoing mehrere JSON-codierte Zeichenfolgen bedeutet nicht gültig JSON.

Was Sie tun müssen, ist json_encode Ihre Daten und echo es einmal.

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

Und in Ihrem js sollen Sie ein Array von Objekten iterieren, nicht ein einfaches Objekt, zum Beispiel:

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

Dank Ich werde Ihre Antwort in 8 Minuten –

0

die Daten in den Feldern für einen Moment, die resultierende JSON wurde Entfernen strukturiert wie folgt:

[][][][] 

Das ist kein gültiger JSON. Der Parser erwartet ein einzelnes Objekt oder Array, nicht mehrere Arrays, die miteinander verkettet sind.

Anstatt die Antwort in der Schleife auszugeben, erstellen Sie die Gesamtantwort und geben Sie einmal nach der Schleife aus. Im Grunde erstellen Sie ein leeres Array vor der while Schleife in PHP, dann schieben Sie Elemente auf das Array innerhalb der Schleife, dann echo das JSON-codierte Array nach der Schleife.

Meine PHP ist sehr rostig, aber in PHP-ish Pseudo-Code würde es so strukturiert sein:

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

akzeptiert @u_mulder bereits diese Antwort gab :) –

+1

@TomOdell: Es ist nicht ungewöhnlich, dass ähnliche Antworten gleichzeitig auf Stack Overflow gegeben werden. Wir koordinieren uns nicht wirklich. – David

+0

Ich weiß, ich sage nur, dass es fairer ist, seine Antwort zu akzeptieren –