Ajax + PHP + jQuery

281
06 июня 2017, 01:41

Как корректно вывести данные получены от сервера.

Есть небольшой MVC-апликейшн.

Вот модель:

 public function getComments()
 {
     $db = Db::getInstance();
     $res = $db->prepare("SELECT * FROM comments LEFT JOIN users ON (comments.login_id = users.id) ORDER BY comments.id DESC LIMIT 10");
     $res->execute();
     $rez = $res->fetchAll();
     return $rez;
 }

Вот контроллер:

 public function action_getajax()
 {
     $this->model = new Model_Comments();
     $data[2] = $this->model->getComments();
     echo json_encode($data[2]);
 }

И вот пытаюсь на главной вывести все комментарии посредством js,jquery+ajax:

    $(function() { 
 
        var ids = []; 
 
        setInterval(function() { 
            myAjax(); 
           }, 3000 
        ); 
 
        function myAjax() { 
            $.ajax({ 
                    url: '/comments/getajax', 
                 cahche: false, 
                   type: 'GET', 
               dataType: 'json', 
            contentType: 'application/json; charset=utf-8', 
             beforeSend: function() { 
                  $('#myajax').html('Loading...'); 
             }, 
                success: function(data) { 
                   $('#myajax').hide(); 
                    $.each(data, function(i, val) { 
                        if($.inArray(val.id, ids) == -1) { 
                            ids.push(val.id); 
                            $('#comments').prepend("<div class=\"panel panel-default\"><div class=\"panel-heading\"><b class=\"panel-title\"><b>" + val.login_id + " / " + val.date + "</div><div class=\"panel-body\">" + val.text + "</div></div>"); 
                        } 
                    }); 
                }, 
                  error: function(msg) { 
                  $('myajax').text(msg.responseText); 
                }, 
            }); 
        }; 
 
    });

Но к сожалению оно некорректно выводит, только 3 последних.

Ответ приходит в таком виде (получается в виде обьектов js):

[{"id":"2","0":"6","login_id":"2","1":"2","text":"test AJAX comments!","2":"test AJAX comments!","date":"2017-05-26 20:39:41","3":"2017-06-05 11:41:23","4":"2","login":"test","5":"test","password":"1234","6":"1234","email":"tester@net.ua","7":"tester@net.ua","8":"2017-05-26 20:39:41"}, ... ]

Сначала пытался преобразовывать ответ через JSON.parse() и JSON.stringify(), но понял, что ответ уже отформатирован и остается только вывести. Выводить пробовал по-разному, но успеха нет.

Может кто подсказать в чем проблема?

Answer 1

Вообщем ковырял много доков и нашел одно решение для моего случая:

    setInterval(function() {
        $.getJSON("/comments/getajax", function(json) {
            var html = "";
            json.forEach(function(val) {
                var keys = Object.keys(val);
                html += "<div class = 'cat'>";
                keys.forEach(function(key) {
                    html += "<div class=\"panel panel-default\"><div class=\"panel-heading\"><b class=\"panel-title\"><b>" + val[key].login_id + "</b> / " + val[key].date + "</div><div class=\"panel-body\">" + val[key].text + "</div></div>";
                   // html += val[key].text + "<br>";
                });
                html += "</div><br>";
                $('#myajax').hide();
                $('#comments').html(html);
                console.log(html);
            });
        });
       }, 3000
    );

Остался ещё вопрос, в модели я делал запрос с left join'ом, что бы при выводе комментов выводился не id-автора а его ник, здесь же получается никак не получиться так сделать? Нужно уже отдавать Ajax'у готовый объект?

READ ALSO
CURL returns 403 forbidden [требует правки]

CURL returns 403 forbidden [требует правки]

I have a problemSome time ago code bellow stoped working

303
Вопрос по циклам while в битриксе

Вопрос по циклам while в битриксе

Знаю что у обычного цикла while есть внутри условие остановки: while ($i <= 10)

275
Запись date() в mysql

Запись date() в mysql

Доброго времени суток!Проблема в следующем - пытаюсь вставить подготовленную дату в базу в поле типа datetime, запрос отрабатывает без ошибок,...

328