aaadddminnn
@aaadddminnn
php it ubuntu debian

Как обработать json?

Всем привет. Делаю чат.
Серверная часть (php)
$query = $mysqli->query("SELECT `id`,`time`,`msg`,`user_id` FROM `chat_public` ORDER BY `id` DESC");
                while ($result = $query->fetch_assoc()) {
                    $result_set = $mysqli->query("SELECT * FROM users WHERE id = '$result[user_id]'");
                    $user = $result_set->fetch_array(MYSQLI_ASSOC);
                    $login[] = $user['login'];
                    $mesage[] = $result['msg'];
                    $id_to[] = $result['user_id'];
                    $time_mesage[] = date('Y-m-d(H:i:s)', $result['time']);
                }

                $return = array("login" => $login,"date" => $time_mesage,"mesage" => $mesage,"id_to" => $id_to);
                 echo json_encode($return);


На клиенте
$.ajax({
        url: "/api/index.php?alg=chat&action=chat_display&using=ajax&chat=public",
        cache: false,
        success: function (ResultData) {
            ResultData = JSON.parse(ResultData);

            for (i = 0; i < ResultData.login.length; i++) {
       var Result = "<div class='block_inside'><div class='block_info'><div class='user no_padd'><label for='2' class='no_margin'><span class='flag inline'><span class='flag_country_5'></span></span><div><span class='info'>Ур.<span class='yellow'>36</span></span><a href='#' onclick='selectNick(this)' class='green'>"+ResultData.login+"</a><a href='/profile/enemy/info/"+ResultData.id_to+"'><span class='icon_info'></span></a></div></label> </div><div class='fl_right'><p>"+ResultData.date+"</p></div><div class='clearFix'></div><p>"+ResultData.mesage+"</p></div></div></div><div class='divider marg_top_5 marg_bot_5'></div><div >";

            }
            $(".result_message").html(Result);
        }
    });
}


Сервер возвращает масив вида
{"login":["admin","admin","admin"],"date":["1970-01-01(01:00:00)","2015-07-02(13:16:41)","2015-07-02(13:16:27)"],"mesage":["kkkkkk","\u0422\u0435\u0441\u0442 \u0430\u043f\u0438","9999"],"id_to":["1","1","1"]}

Проблема в том что место 3 смс возвращает одно.
1970-01-01(01:00:00),2015-07-02(13:16:41),2015-07-02(13:16:27)
kkkkkk,Тест апи,9999

Как исправить?
  • Вопрос задан
  • 531 просмотр
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Поместить $(".result_message").append(Result); внутрь цикла, разумеется. Ну или вынести Result из цикла и внутри него конкатенировать строку.

Ну а уж если совсем стрельбу по собственным ногам исключить, то так:
$query = $mysqli->query(
	"SELECT chat.id, chat.time, chat.msg, chat.user_id, u.login
	FROM chat_public as chat
	INNER JOIN users as u ON u.id = chat.user_id
	ORDER BY chat.id DESC"
);

$messages = [];

while ($result = $query->fetch_assoc()) {
	$messages[] = [
	    'login' => $result['login'],
	    'text' => $result['msg'],
	    'user_id' => $result['user_id'],
	    'date' => date('Y-m-d(H:i:s)', $result['time']),
	];
}

echo json_encode($messages, JSON_UNESCAPED_UNICODE);


var $xhr = $.getJSON("/api/index.php?alg=chat&action=chat_display&using=ajax&chat=public");

$xhr.done(function (messages) {
	$.each(messages, function(index, message)
	{
		// Тут ваш большой html, я упростил.
		$(".result_message").append('<p>' + message.login + ' / ' + message.date + ' / ' + message.text + '</p>');
	});
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы