Вывод массива json

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Закрыто
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Вывод массива json

Сообщение systemiv »

Как с помощью jquery вывести массив в блок, который мне нужно.
Пробовал вот так:
$('#block').append(data.author+', '+data.message);
Но не прокатило=)
Вот как выглядит массив полученых значений
Screenshot.png
Т.е. тут как бы массив, и как его весь вывести?
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Вывод массива json

Сообщение timlar »

Какой массив? В какой блок?
Twitter: @timlar_ua
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Re: Вывод массива json

Сообщение systemiv »

Мне приходит массив из вот таких объектов.
{"id_message":"72","author_message":"anonym","text_message":"dddddd"}
Мне нужно что бы они выводились в блок <div id="chat">
То есть если просто обратится из функции $.post - data.model.author_message он ничего не находит.
Аватара пользователя
Troy
Сообщения: 235
Зарегистрирован: 2011.02.03, 21:04

Re: Вывод массива json

Сообщение Troy »

systemiv писал(а):Мне приходит массив из вот таких объектов.
{"id_message":"72","author_message":"anonym","text_message":"dddddd"}
Мне нужно что бы они выводились в блок <div id="chat">
То есть если просто обратится из функции $.post - data.model.author_message он ничего не находит.
data.model[0].author_message
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Re: Вывод массива json

Сообщение systemiv »

По идеи да, но я ещё туплю с алгоритмом

Код: Выделить всё

function last(){
                if(!process){
                    process = true;
                    $.post('chat/lastMessage', {
                        id_message: lastmessage
                    }, function(data){
                        if(lastmessage != data.last.id_message){
                            var count = data.model.length;
                            lastmessage = data.last.id_message;
                            for(var i = 0; i <= count; i++){
                                $('#chat').append('<li>' + data.model[i].author_message + '</li>');
                            }
                        }
                    }, 'json');
                    $('.left-content').scrollTop($('.left-content').get(0).scrollHeight);
                    process = false;
                }
            }
 
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Вывод массива json

Сообщение timlar »

Как-то так:

Код: Выделить всё

data = [
    {"id_message":"72","author_message":"anonym","text_message":"cvbncvbncv"},
    {"id_message":"73","author_message":"anonym","text_message":"dfghdfgh"},
    {"id_message":"74","author_message":"anonym","text_message":"rtyurtyurtrr"}
];

for (var i in data) {
    var id     = data[i].id_message,
        author = data[i].author_message,
        text   = data[i].text_message,
        block  = $('<div>');

    console.log('%d | %s: %s', id, author, text);

    $('#chat').append( block.html(author + ': ' + text) );
} 
Последний раз редактировалось timlar 2011.07.07, 22:22, всего редактировалось 1 раз.
Twitter: @timlar_ua
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Вывод массива json

Сообщение Ekstazi »

jquery tmpl вам в помощь.
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Вывод массива json

Сообщение timlar »

Ekstazi писал(а):jquery tmpl вам в помощь.
Если человек испытывает трудности с такими мелочами, то думаю, ему пока рано советовать jQuery tmpl
Twitter: @timlar_ua
Аватара пользователя
Troy
Сообщения: 235
Зарегистрирован: 2011.02.03, 21:04

Re: Вывод массива json

Сообщение Troy »

Я вобще удивлен, что у него при таких вопросах Ubuntu стоит, на вид 8-9 версия
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Re: Вывод массива json

Сообщение systemiv »

Troy,11.04. по внешности не судят)
и если ты пишешь что бы постибаться, а не помочь, иди в курилку пиши или выскажи все претензии в личку
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Re: Вывод массива json

Сообщение systemiv »

Алгорит примерно такой:
В яваскрипте в автозагрузку помещаем что при нажатии кнопки, методом POST данные будут отправляться в php, тот в свою очередь из заносит в БД.
С нажатием кнопки, и передачи запроса, выполняется метод last()

Глобально объявляем переменную var process = false; которая показывает, что идёт процесс загрузки.
Ещё глобально объявлена переменная lastmessage, в которой будет храниться последнее сообщение.

В методе last мы проверяем, идёт ли процес загрузки или нет.
Потом мы проверяем, если объявленная переменная у нас меньше чем число сообщений, которое отдал php, то выводим в конец блока информацию полученную в формате json.
По идеи всё верно. Вот код.

Скрипт:

Код: Выделить всё

<script type="text/javascript">
            $(document).ready(function(){
                $('#text-message').focus();
                setInterval("last()", 2000);
                $('.left-content').scrollTop($('.left-content').get(0).scrollHeight);
                $('#message-form').submit(function(){
                    $.post('chat/addMessage', {
                        text_message: $('#text-message').val()
                    }, last());
                    $('#text-message').focus();
                    $('#text-message').val('');
                    $('.left-content').scrollTop($('.left-content').get(0).scrollHeight);
                    return false;
                });
            });
            
            var process = false;
            var lastmessage;
            
            function last(){
                if(!process){
                    process = true;
                    $.post('chat/lastMessage', {
                        id_message: lastmessage
                    }, function(data){
                        if(lastmessage < data.last.id_message){
                            var count = data.model.length;
                            lastmessage = data.last.id_message;
                            
                            for(var i = 0; i <= count; i++){
                                $('#chat').append('<li>' + data.model[i].text_message + '</li>');
                                $('.left-content').scrollTop($('.left-content').get(0).scrollHeight);
                            }
                        }
                    }, 'json');
                    process = false;
                }
            }
        </script>
И контроллер:

Код: Выделить всё

<?php
    class ChatController extends CController{
        public function actionIndex(){
           $criteria = new CDbCriteria(array(
                'order' => 'id_message DESC',
                'limit' => '50',
            ));
            
            $model = Chat::model()->findAll($criteria);
            $model = array_reverse($model);
            
            $this->render('index', array(
                'model' => $model,
            ));
        }
        
        public function actionAddMessage(){
            $model = new Chat;
            $model->text_message = $_POST['text_message'];
            $model->save();
        }
        
        public function actionLastMessage(){
            $criteria = new CDbCriteria(array(
                'condition' => 'id_message > :id_message',
                'order' => 'id_message DESC',
                'params' => array(':id_message' => $_POST['id_message']),
            ));

            
            $model = Chat::model()->findAll($criteria);
            $model = array_reverse($model);
            $last = end($model);
            
            echo CJSON::encode(array(
                'model' => $model, 
                'last' => $last,
            ));
        }
    }
 
Закрыто