С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826

Обновление новостей

01.03.2017, 15:32. Показов 1347. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю с помощью Ajax получаю со страниц перечень н-ного количества новостей пусть для простоты в виде

HTML5
1
2
3
<div id="1">Новость 1</div>
<div id="2">Новость 2</div>
<div id="3">Новость 3</div>
Как производить обновление не всего контекста каждую к при меру 1 минуту а именно получать от сервера изменёные или новые новости? JavaScript и Ajax у меня хромает а точнее вообще беда потому тыкайте прямо носом в то что мне надо.
Я так понимаю мне надо после получения списка новостей выше отпарсить силами JavaScript на id и потом Ajax посылать массив того что у меня сейчас имеется где уже на php страници сверить не изменилось ли чтото если какието новости изменились выслать измененный вариант после чего JavaScript опять парсим и заменяем что есть.

Вот вопрос если так то с помощью чего парсить если нет то как лучше реализовывать обновление изменение удоление новостей не перезагружая страницу
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2017, 15:32
Ответы с готовыми решениями:

Вывод новостей
Здравствуйте, сделал на сайте новости, хочу чтобы они выводились как в вк мотаешь вниз они появляются или жмёшь кнопку показать ещё и...

Лента новостей!
Здравствуйте, подскажите пожалуйста, есть ли у вас уроки или просто примеры, в которых рассматривается, вопрос о том как правильно сделать,...

Отображение новостей
Делаю сайт. Новости отображаются в 2 колонки, но слева направо. Высота блоков новостей разная. Такой пример. В 1 колонке новость высотой...

14
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.03.2017, 15:52
Цитата Сообщение от КВА696 Посмотреть сообщение
Как производить обновление не всего контекста каждую к при меру 1 минуту а именно получать от сервера изменёные или новые новости?
Храните где-то на стороне клиента (в data-атрибуте, например) ID или временную метку последней записи. При запросе посылайте её серверу, а там уже фильтруйте записи:
SQL
1
SELECT * FROM news WHERE created_at > ?
1
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
01.03.2017, 16:29
Лучший ответ Сообщение было отмечено КВА696 как решение

Решение

Начнём с того, что при обмене данными между клиентом и сервером средствами ajax, желательно передавать только сериализованные данные, а представление формировать уже на месте получателя. Подробнее:

Сейчас судя по всему вы делаете запрос ajax-ом на сервер, который генерирует полноценный html-код в виде
HTML5
1
2
3
<div id="1">Новость 1</div>
<div id="2">Новость 2</div>
<div id="3">Новость 3</div>
Кстати пусть у вас тут и упрощённый пример, но всё-таки никогда не назначайте id элементов идентификаторами, начинающимися с цифры.
Вместо того, чтобы передавать с сервера html целиком можно передать только необходимые данные, а разметку сформировать на клиенте. Например можно использовать формат JSON.
Делаем запрос на получение новостей:
JavaScript
1
2
3
4
5
6
7
8
// Средствами jQuery
$.ajax({
  method: 'GET',
  url: '/path/to/php/file.php',
  success: function(response) {
    // Заполним чуть позже. В переменной response - ответ от сервера
  }
});
Наш php-файл:
PHP
1
2
3
4
5
6
7
$mysqli = new mysqli("host", "user", "pass", "db"); // Настройки БД
$result = $mysqli->query("SELECT * FROM news"); // Запрос новостей
$news = array();
while ($row = $result->fetch_array()){
  $news[$row['id']] = $row;
}
echo json_encode($news); // Возвращаем новости, сериализованные в формат JSON
В ответе на клиенте получим примерно следующую структуру:
JSON
1
{"1":{"id":"1","title":"Новость 1","text":"Текст новости 1"},"2":{"id":"2","title":"Новость 2","text":"Текст новости 2"},"3":{"id":"3","title":"Новость 3","text":"Текст новости 3"}}
Теперь на клиенте мы можем распарсить полученную строку средствами JS, вытащить из неё данные и сформировать разметку.
Заполним до конца блок success:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
$.ajax({
  method: 'GET',
  url: '/path/to/php/file.php',
  success: function(response) {
    var data = JSON.parse(response); // Переменная data - теперь объект JS с нашими данными
    var html = '';
    for (var id in data) {
      html += '<div id="new'+id+'">'+data[id].title+'</div>';
    }
  }
});
Теперь в переменной html у нас есть искомая разметка, которую вы можете отобразить на странице.

Ну а теперь после всего, что написано выше, подумаем, как организовать клиент-серверное взаимодействие, решив вашу проблему. Например для загрузки только новых новостей можно добавить в ajax-запрос id последней загруженной новости. А в php-файле запрашивать только строки с id большим, чем указано. Например:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(typeof lastId === "undefined"){
  var lastId = 0; // Если запрос осуществляется впервые на текущей странице - то объявляем переменную lastId = 0
}
$.ajax({
  method: 'GET',
  data: {
    lastId: lastId
  }
  url: '/path/to/php/file.php',
  success: function(response) {
    var data = JSON.parse(response);
    var html = '';
    for (var id in data) {
      html += '<div id="new'+id+'">'+data[id].title+'</div>';
      lastId = parseInt(id); // Запоминаем id последней запрошенной новости
    }
  }
});
PHP
1
2
3
4
5
6
7
$mysqli = new mysqli("host", "user", "pass", "db");
$result = $mysqli->query("SELECT * FROM news WHERE id > " . $_GET['lastId']); // Запрос новостей с id > lastId
$news = array();
while ($row = $result->fetch_array()){
  $news[$row['id']] = $row;
}
echo json_encode($news);
Теперь нам вернутся только новые новости.

P.S. Это лишь один из возможных методов решения проблемы (и не факт, что самый оптимальный). Как именно будут взаимодействовать клиент и ваш сервер - вам решать.

Остальное оставляю на вас.
1
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
02.03.2017, 10:24  [ТС]
Цитата Сообщение от Balanaar Посмотреть сообщение
Вместо того, чтобы передавать с сервера html целиком можно передать только необходимые данные, а разметку сформировать на клиенте.
Вот за это огромное спасибо а то во всем инете примеры только полной передачи html я думал только так, а такой вариант меня больше чем устраивает

Добавлено через 50 минут
Balanaar, А вот ещё такой вопрос. После такой реализации как лучше поступить к примеру при переходе с 1 на 2 страницу мне лучше затереть весь массив о содержании первой страници или лучше накапливать что бы если захочет вернуться назад уже вернулся без ожиданий. Догадываюсь что огромный минус это то что будет память забиваться и на стареньких компах это дело может быть загнутым. Но можно ограничение поставить на количество в массиве. или оно того не стоит и просто убивать массив первой страници и добавить массив с данными второй. Речь не только о новостях но и о чем угодно будь то товары или ещё что нить в этом роде
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
02.03.2017, 10:38
КВА696, обычно данные с сервера запрашиваются каждый раз заново. Также существует так называемый механизм кеширования.
Если вы не грузите мегабайты данных и ваш ресурс не помещают тысячи людей ежечасно, то заморачиваться, я думаю, с этим не стоит. Но вы можете попробовать
1
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
08.03.2017, 15:55  [ТС]
Цитата Сообщение от Balanaar Посмотреть сообщение
В ответе на клиенте получим примерно следующую структуру:
JSONВыделить код
1
{"1":{"id":"1","title":"Новость 1","text":"Текст новости 1"},"2":{"id":"2","title":"Новость 2","text":"Текст новости 2"},"3":{"id":"3","title":"Новость 3","text":"Текст новости 3"}}
Balanaar, а не подскажите как сортировать этот массив испробовал все варианты и по этому образцу делал
Кликните здесь для просмотра всего текста

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function userCompare(a,b)
{
  var r=0;
  if (a.surname > b.surname) { r = 1; }
  if (a.surname < b.surname) { r = -1; }
  return r;
}
 
var users = [];
users.push({name:'Nikolay', surname:'Sidorov', age:20});
users.push({name:'Andrey', surname:'Petrov', age:30});
users.push({name:'Petr', surname:'Ivanov', age:40});
users.push({name:'Ivan', surname:'Kovalenko', age:50});
users.push({name:'Nikolay', surname:'Gogol', age:60});
 
function printUsers(){
  var users_size = users.length;
  for (i=0; i < users_size; i++)
  {
    console.log('%s %s %d years',users[i].surname,users[i].name,users[i].age);
  }
}
console.log("Массив до сортировки:");
console.log(users);
printUsers(); // красивый вывод
users.sort(userCompare); // сортируем массив
console.log("Массив после сортировки:");
console.log(users);
printUsers();


а в ответ только ошибка

Uncaught TypeError: table.sort is not a function
at Object.funSuccess1 [as success] (5.php:163)
at i (jquery-3.1.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.1.1.min.js:2)
at A (jquery-3.1.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-3.1.1.min.js:4)
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
08.03.2017, 16:59
Приведите лучше ваш код, а не код образца. Откуда ж я пойму, в чём у вас ошибка?

Добавлено через 6 минут
Вообще если вы хотите отсортировать выводимые данные, вы можете сделать это ещё на этапе запроса данных из БД с помощью ORDER BY. И не надо потом изголяться:
PHP
1
2
3
4
5
6
7
$mysqli = new mysqli("host", "user", "pass", "db"); // Настройки БД
$result = $mysqli->query("SELECT * FROM news ORDER BY title"); // Запрос новостей
$news = array();
while ($row = $result->fetch_array()){
  $news[$row['id']] = $row;
}
echo json_encode($news); // Возвращаем новости, сериализованные в формат JSON
1
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
08.03.2017, 17:42  [ТС]
Balanaar, Думал об этом, но если при вариате когда была загружена все варианты какой либо информации смысл для сортировки посылать опять запрос на сервер. В любом случае хотелось бы по больше разобраться с этими массивами в javascripte а то после C# просто ужасно не понимаю когда всё можно запихать в один массив да ещё и многоуровневые тут такие эксклюзивные.

http://kba696.h1n.ru/5.php

то что русского не должно знаю постараюсь как заработает найти что то читаемое на английском
сделать 1 функцию для приёмки и обновления тоже знаю

Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CKEditor Sample</title>
        <script src="сomponents/ckeditor/ckeditor.js"></script>
        <script type="text/javascript" src="./сomponents/jquery-3.1.1.min.js" charset="utf-8"></script>
        <style type="text/css">
            .popup {
                position: absolute;
                height:100%;
                width:100%;
                top:0;
                left:0;
                display:none;
            }
            
            .popup_bg {
                background:rgba(0,0,0,0.4);
                position:fixed;
                z-index:1;
                height:100%;
                width:100%;
            }
        </style>
        <script>
            var table = new Array();
        
            function ChangeColor() {
                document.getElementById('popup').style.top = $(window).scrollTop()+100+"px";
                $(".popup").fadeIn(800); // Медленно выводим изображение
            }
            
            function ChangeClose() {
                $(".popup").fadeOut(800);   // Медленно убираем всплывающее окно
            }
            
            //отправка
            
            function funOzid(){
                $(".errores").text("Идёт отправка данных.");
            }
            
            
            // Функции сортировки по имени
            function sName(n1,n2)
{
  if (n1==n2) return 0;
  if (n1<n2)
    return 1;
  else 
    return -1;
}
            
            
            
            
            function funSuccess(response){
 
                var data = JSON.parse(response); // Переменная data - теперь объект JS с нашими данными
                var html = '';
                
                for (var id in data) {
                    
                    if(data[id].состояние==1)
                    {
                        for (var id1 in table) {
 
                            if(table[id1].id==data[id].id)
                            {
                                table[id1].название = data[id].название;
                                table[id1].картинка = data[id].картинка;
                                table[id1].текст = data[id].текст;
                                table[id1].создание = data[id].создание;
                                table[id1].изменение = data[id].изменение;
                            }
                        }
                    }
                    else if(data[id].состояние==2) {
                        table[id]=data[id];
                    }
                    else if(data[id].состояние==3) {
                    }
                    else{
                        for (var id1 in table) {
 
                            if(table[id1].id==data[id].id)
                            {
                                delete table[id1];
                            }
                        }
                    }
                }
                
                table.sort(sName);
                
                for (var id in table) {
 
                html += '<br />'+
                    '<br />'+
                    '<div id="new'+id+'" style="background: navy;color: white;border-width: 2px;border-style: dashed;border-color: black;padding: 20px;">'+
                        'название - ' +table[id].название +'<br />'+
                        'картинка - ' +table[id].картинка +'<br />'+
                        'текст - '    +table[id].текст    +'<br />'+
                        'создание - ' +table[id].создание +'<br />'+
                        'изменение - '+table[id].изменение+'<br />'+
                    '</div>';
                }
                $(".newss").html(html);
 
                $(".popup").fadeOut(800);
            }
                
            function zakaz(form){
                var errors="";
                var text=CKEDITOR.instances['text'].getData();
                var Text1=form.Text1.value;
                if(text=="" || Text1==""){
                    errors+="Не все поля заполнены";
                }
                
                if(errors!=""){
                    $(".errores").text(errors);
                }
                else{
                    var table1 = new Array();
                    for (var id in table) {
                        table1[id]={id:id, изменение:table[id].изменение, состояние:0};
                    }
                    
                    $.ajax({
                        url: "./сomponents/news/proverca.php",
                        type: "POST",
                        data: ({text: text,Text1: Text1, tabl: table1}),
                        dataType: "html",
                        beforeSend: funOzid,
                        success:funSuccess
                    });
                }
            }
 
            
            //получение списка новостей
            function funOzid1(){
                $(".newss").html("Идёт приёмка.");
            }
            
            function funSuccess1(response){
                table = JSON.parse(response); // Переменная data - теперь объект JS с нашими данными
                var html = '';
                
                
                function userCompare(a,b)
                    {
                      var r=0;
                      if (a.id > b.id) { r = 1; }
                      if (a.id < b.id) { r = -1; }
                      return r;
                    }
                
                console.log(table);
 
                table.sort(userCompare);
                
                for (var id in table) {
 
                html += '<br />'+
                    '<br />'+
                    '<div id="new'+id+'" style="background: navy;color: white;border-width: 2px;border-style: dashed;border-color: black;padding: 20px;">'+
                        'название - ' +table[id].название +'<br />'+
                        'картинка - ' +table[id].картинка +'<br />'+
                        'текст - '    +table[id].текст    +'<br />'+
                        'создание - ' +table[id].создание +'<br />'+
                        'изменение - '+table[id].изменение+'<br />'+
                    '</div>';
                }
                $(".newss").html(html);
            }
            
            $.ajax({
                url: "./сomponents/news/perecen.php",
                type: "POST",
                //data: ({text: text,Text1: Text1}),
                dataType: "html",
                beforeSend: funOzid1,
                success:funSuccess1
            });
        </script>
    </head>
    <body>
    
        <div class='popup'>
            <div class='popup_bg' onclick="ChangeClose();"></div>
            <div id="popup" style="z-index: 5; background-color: rgb(195, 195, 195);position: relative;width: 1000px;margin: 0 auto;padding: 20px;border-radius: 10px;-moz-border-radius: 10px;-webkit-border-radius: 10px;">
                <form action="./сomponents/news/proverca.php" method="post" id="form1">
                    Тема новости<br />
                    <input name="Text1" type="text" /><br /><br />
                    Картинка новости<br />
                    <input name="File1" type="file" /><br /><br />
                    <textarea name="text"></textarea>
                    <p style="text-align:center;"><input name="Submit1" type="button" onclick="zakaz(document.getElementById('form1'));" value="Отправить" /></p>
                    <div class="errores"></div> 
                </form>
                <script>
                    CKEDITOR.replace("text", {
                        customConfig: 'configAdmin.js'
                    });
                </script>
            </div>
        </div>
        
        <a href="#" style="color: green;" onclick="ChangeColor();">Добавить новость</a>
 
        <div  class="newss">
        
        </div>
        
    </body>
</html>
proverca.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
header('Content-Type: text/html; charset=utf-8');
session_start();
 
require_once $_SERVER['DOCUMENT_ROOT'].'/config.php';
 
if(empty($_POST['text'])){
    die("ErrorТекст новости отсутствует");
}
if(empty($_POST['Text1'])){
    die("ErrorИмя новости отсутствует");
}
 
 
if($_SESSION['prava'] == 'admin'){
    
    //подгружаем библиотеку
    require_once $_SERVER['DOCUMENT_ROOT'].'/сomponents/ckeditor/proverca.php';
    //stripslashes раз экранировать
    $назв = addslashes($_POST['Text1']);
    $текст = addslashes(proverca($_POST['text'], "admin"));
    $kba696_db->query("INSERT INTO `kba696_news` (`название`, `картинка`, `текст`) VALUES ('".$назв."','адрес картинки','".$текст."')");
        
    /*// Закрываем соединение
    $kba696_db->close();*/
}
else{
    //die("Errorвы не админ");
}
 
    
    $newss = $kba696_db -> query("SELECT * FROM `kba696_news` ORDER BY `создание` desc");
        
    if($newss) {
        /*$news = array();*/
        
        $bol = is_array($_POST['tabl']);
                $pos = $_POST['tabl'];       
        while($row = $newss -> fetch_assoc()) {
            
            if($bol){
                $bolle_dob = trye;
 
                foreach ($pos as $key => &$value){
 
                    if($row['id']==$value['id'] && $row['изменение']==$value['изменение']){
                        $pos[$key]['состояние'] = 3;
                        /*echo "Удолить из списка value".$key."<br />";*/$bolle_dob=false; break;
                    }
                    else if($row['id']==$value['id'] && $row['изменение']!=$value['изменение']){
                        $pos[$key]['состояние'] = 1;
                        $pos[$key]['название'] = $row['название'];
                        $pos[$key]['картинка'] = $row['картинка'];  
                        $pos[$key]['текст'] = $row['текст'];  
                        $pos[$key]['создание'] = $row['создание'];
                        $pos[$key]['изменение'] = $row['изменение'];                      
                        /*echo "Заменить ".$key."<br />";*/$bolle_dob=false; break;
                    }
                }
                
                if($bolle_dob) {
                    $row['состояние']=2;
                    array_push($pos, $row);
                }
                
            }
            /*echo "22<br/>";
            $news[$row['id']] = $row;*/
        }
        echo json_encode($pos); // Возвращаем новости, сериализованные в формат JSON     
    }
 
    // Закрываем соединение
    $kba696_db->close();
perecen.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
header('Content-Type: text/html; charset=utf-8');
session_start();
 
require_once $_SERVER['DOCUMENT_ROOT'].'/config.php';
 
    $newss = $kba696_db -> query("SELECT * FROM `kba696_news` ORDER BY `создание` desc");
        
    if($newss) {
        $news = array();
        while($row = $newss -> fetch_assoc()) {
            $news[$row['id']] = $row;
        }
        echo json_encode($news); // Возвращаем новости, сериализованные в формат JSON        
    }
 
    // Закрываем соединение
    $kba696_db->close();


Добавлено через 2 минуты
А это чисто проблемное место вырезанное из выше вставленного

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
            var table = new Array();
....
            // Функции сортировки по имени
            function sName(n1,n2)
{
  if (n1==n2) return 0;
  if (n1<n2)
    return 1;
  else 
    return -1;
}
    ....
 
           function funSuccess1(response){
                table = JSON.parse(response); // Переменная data - теперь объект JS с нашими данными
                var html = '';
                
                
                function userCompare(a,b)
                    {
                      var r=0;
                      if (a.id > b.id) { r = 1; }
                      if (a.id < b.id) { r = -1; }
                      return r;
                    }
                
                console.log(table);
 
                table.sort(userCompare);//вот тут ошибка
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
08.03.2017, 17:44  [ТС]


Uncaught TypeError: table.sort is not a function
at Object.funSuccess1 [as success] (5.php:163)
at i (jquery-3.1.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.1.1.min.js:2)
at A (jquery-3.1.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-3.1.1.min.js:4)
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
08.03.2017, 19:45  [ТС]
Balanaar, + еще почему сортирую у клиента видимо с логикой сильно напортачил я на сервер посылаю ид, и изменения того что у меня есть на сервере получчаю список того что должно быть и обробатываю что должно быть удолено что остаться а что из менено. можно потом этот массив отсортировать в php. но видимо кривизна от этого не изменится.
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
08.03.2017, 21:15
Переменная table в вашем коде является не массивом, а объектом. В отличие от PHP это 2 разные вещи. Объекты JS в PHP представляются ассоциативными массивами. У объектов в JS нет метода sort().
1
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
08.03.2017, 21:18  [ТС]
Balanaar, это че получается через цикл переберать объект table и делать из него массив?

А в моём случае лучше всеже вернуть уже в том виде в котором надо отобразить?
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
08.03.2017, 21:24
Цитата Сообщение от КВА696 Посмотреть сообщение
это че получается через цикл переберать объект table и делать из него массив?
Зачем? По какому полю вам надо отсортировать объект?
Цитата Сообщение от КВА696 Посмотреть сообщение
А в моём случае лучше всеже вернуть уже в том виде в котором надо отобразить?
Зависит от ситуации. Да, разумнее всего делать именно так.
1
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
08.03.2017, 21:25  [ТС]
Цитата Сообщение от Balanaar Посмотреть сообщение
Зачем? По какому полю вам надо отсортировать объект?
к примеру id или создание тут важен принцип.
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
08.03.2017, 21:42
Лучший ответ Сообщение было отмечено КВА696 как решение

Решение

В таком случае вам надо на сервере составлять не ассоциативный массив, а обычный массив перед сериализацией в JSON. Тогда на клиенте после десериализации у нас получится не объект, а массив объектов. Вот тогда-то вы и сможете применить к нему свой метод sort() с вашей функцией сравнения.
В нашем примере необходимо поправить 5ую строчку:
PHP
1
2
3
4
5
6
7
$mysqli = new mysqli("host", "user", "pass", "db"); // Настройки БД
$result = $mysqli->query("SELECT * FROM news"); // Запрос новостей
$news = array();
while ($row = $result->fetch_array()){
  $news[] = $row;
}
echo json_encode($news); // Возвращаем новости, сериализованные в формат JSON
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2017, 21:42
Помогаю со студенческими работами здесь

Java листание новостей
Здравствуйте формучане, перейду сразу к делу, так как не силен в js возник вопрос, как вывести alert сообщение когда div с новостями дошел...

Лента новостей в контакте
Интересует, как реализуется лента новостей, как например вконтакте? Если кто имеет представление, распишите на пальцах, как это...

лента новостей на сайте
решил добавить ленту новостей на свой сайт. на сайте http://www.eurosport.ru/tennis/# полностью устраивающая меня лента новостей и...

ajax редактирование и добавление новостей
У кого то есть код который выводит, редактирует, добавляет новости в базу данных? Или киньте ссылку, пожалуйста. Искал, не нашёл(

Вывод новостей с другого сайта
Здравствуйте уважаемые программисты, подскажите можно ли вывести новости с другого сайта посредством Java скрипта, если да то каким (есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru