2015-05-13 4 views
3

Я пытаюсь создать систему комментариев на фотографиях.


Я понимаю, как использовать $ .getJSON, когда массив как это:

get.php:

$var = 5; 
echo json_encode(array('var'=>$var)); 

main.php:

$.getJSON("get.php",function(data){ 
    number = data.var; // number = 5 
}); 

Но у меня более сложная вещь.


Мои комментарии таблица имеет следующие 4 колонки: идентификатор | photo_id | Комментарий | Дата

Для примера скажу, что мы пытаемся получить комментарий данные из фото с

photo_id == 1.

Мы не знаем, сколько комментариев может быть.

В getcomments.php:

$photoid = 1; 

$comment = mysqli_query($conn,"SELECT * FROM comments WHERE photo_id='$photoid'"); 

while($commentrow = $comment->fetch_assoc()) { 
    $comments[] = $commentrow; 
} 

Тогда вы закодировать:

echo json_encode($comments); 

который печатает что-то вроде этого (фото есть 2 комментария):

[{"id":"1","photo_id":"1","comment":"text","date":"23858556"},{"id":"2","photo_id":"1","comment":"text","date":"23858561"}] 

Как объявлять переменные для массива комментариев?

$.getJSON("getcomments.php",function(data){ 
    // how do I declare variables for the comments array, especially since you don't know how many there might be? 
}); 

Кроме того, у меня есть два JSon массивы, которые должны быть вторит в том же PHP-файл. то есть echo json_encode(array('img1'=>$img1link)) и echo json_encode($comments); необходимо повторить в том же файле PHP, но это заставило код вообще перестать работать.

+1

Если вы хотите, чтобы отобразить комментарии, которые вам нужно перебрать по массиву. Вы можете использовать для функции loop или forEach. – jcubic

+0

Я думаю, вы имеете в виду 'main.js:'. – xinthose

ответ

3

Если вы хотите отобразить комментарии, которые необходимо перебрать по массиву. Вы можете использовать для функции loop или forEach.

$.getJSON("getcomments.php",function(data){ 
    data.forEach(function(comment) { 
     $('div').append('<span>' + comment.comment + '</span>'); 
    }); 
}); 

Для отображения двух JSON необходимо объединить их в один объект JSON.

echo json_encode(array('img' => $img1link, 'comments' => $comments)); 
+0

По какой-то причине я не могу заставить это работать. Я поместил ваш код в совершенно новый файл, добавленный

поместил два JSON в один и тот же массив и т. Д. – frosty

+0

@frosty Если вы поместите оба JSON в массив, как во втором коде, вам нужно будет использовать 'data.comments.forEach' – jcubic

+0

Это работает! Большое спасибо. – frosty

0
[{"id":"1","photo_id":"1","comment":"text","date":"23858556"},{"id":"2","photo_id":"1","comment":"text","date":"23858561"}] 

Используя этот JSON, data массив, и вы должны управлять его как массив. Вы можете пропустить его, используя простые циклы (for, while ...) или используя новые функциональные методы, такие как forEach, map, filter ....

Пожалуйста, попробуйте этот пример:

$.getJSON("getcomments.php",function(data){ 
    data.forEach(function(item, index, all) { 
     console.log(item.comment); 
    }); 
}); 
0

Объявляем объект и нажать его в массив.

var commentsArr = []; 

for (var i = 0; i < data.length; i++) { 
    var objToPush = { 
     id: data.id, 
     comment: data.comment, 
     date: data.date 
    } 

    commentsArr.push(objToPush); 
} 
+0

'' 'data''' - это массив. '' 'data.id''' не определено. –

+0

btw '' 'commentsArr''' будет таким же, как' '' data''' ... вам не кажется? –