Помогите онайти ошибку в бновлении данных
Данные приходят с сервера (пользователи). Если такой пользователь уже есть ( выведен), то ничего не делать , если нету , то добавить в конец ( а лучше в начало ) списка. И обновлять через 2-3 секунды.
У меня после обновления , все добавляется в конец списка( списка пользователи) и выходи так , что пользователи одинаковые - повторяются ... и опять и опять ... Помогите это исправить ) Спасибо Вот онлайн - раскомментировать // setInterval(users, 4000); http://codepen.io/Zamay/pen/egbONw?editors=1010
function users() {
$.ajax({
type: 'GET',
url: 'https://main-workspace-juggerr.c9users.io:8081/user',
success: function (data) { // Обработчик успешного ответа
$.parseJSON(JSON.stringify(data)).forEach(
function (obj) {
console.log(obj)
if (obj.username != "" || obj.user_id != "" ) {
var users = document.querySelector('.list_user');
var userId = obj.user_id;
if ($('.list_user a').attr('href').replace('#', '') == userId) {
console.log("1");
//не выводить
} else {
console.log("2");
var ul = document.querySelector(".list_user");
ul.lastElementChild.innerHTML += `<li><a href = #${obj.user_id} class="user">${obj.username} </a></li>`;
}
}
}
)
setInterval(users, 4000);
console.log("3");
},
error: function (data, status) { // Обработчик ответа в случае ошибки
console.error(data, status);
}
});
}
users();
|
Zamay,
var userAll = {};
function users() {
$.ajax({
type: 'GET',
url: 'https://main-workspace-juggerr.c9users.io:8081/user',
success: function (data) { // Обработчик успешного ответа
$.parseJSON(JSON.stringify(data)).forEach(
function (obj) {
console.log(obj)
if (obj.username != "" || obj.user_id != "" ) {
var users = document.querySelector('.list_user');
var userId = obj.user_id;
if (!userAll[userId]){
userAll[userId] = true
var ul = document.querySelector(".list_user");
ul.lastElementChild.innerHTML += `<li><a href = #${obj.user_id} class="user">${obj.username} </a></li>`;
}
}
}
)
setInterval(users, 4000);
console.log("3");
},
error: function (data, status) { // Обработчик ответа в случае ошибки
console.error(data, status);
}
});
}
users();
|
рони, спасибо.
Теперь понятно ! Надо было в массив записывать ( как я понял ) Но такой вопрос - в консоле , после каждого обновление запроса - вывод console.log("3") увеличивается в 2 раза . 3 (2) 3 (4) 3 (8) 3 (16) 3 ... И через 30 сек сайт лежит. Приходиться вкладку закрывать и заново открывать ! Почему так ? |
Zamay,
потому что вы умножаите интервалы setInterval замените на setTimeout или уберите из функции |
Спасибо еще раз )
А можешь еще посмотреть ... Я делаю как ты , но вот на innerHTML ругается . не знаю ,на что можно заменить ( https://codepen.io/Zamay/pen/egbONw?editors=1010
var messagesAll = {};
function messages() {
$.ajax({
type: 'GET',
url: 'https://main-workspace-juggerr.c9users.io:8081/messages',
success: function (data) { // Обработчик успещного ответа
$.parseJSON(JSON.stringify(data)).forEach(
function (obj) {
if (obj.user_id != undefined) {
var messages = document.querySelector('.wrap-tab-content');
var userId = obj.user_id;
var message = messages.querySelector('#' + userId);
if (messagesAll[message]) {
messagesAll[message] = false;
messages.querySelector('#' + userId).innerHTML += `<p><b>${obj.user_id}:</b> ${obj.message}</p>`;
} else {
messagesAll[message] = true;
var newDiv = document.createElement('div');
newDiv.id = obj.user_id;
newDiv.innerHTML = `<p><b>${obj.user_id}:</b> ${obj.message}</p>`;
messages.appendChild(newDiv);
}
}
}
)
},
error: function (data, status) { // Обработчик ответа в случае ошибки
console.error(data, status);
}
});
}
setInterval(messages, 1000);
|
Zamay,
может на новый формат замены ругается а не на innerHTML не все поддерживают ещё а так insertAdjacentHTML |
рони,
"Cannot read property 'innerHTML' of null " "Cannot read property 'insertAdjacentHTML' of null " |
Zamay,
messagesAll[message] каков был смысл менять предложенный вам вариант с userId ? |
рони, если я правильно понял ваш вопрос - то у меня 2 функции: одна получает пользователь , а вторая сообщения !
У меня изначально была такая функция, но она тоже не правильно обновляется( как и users () ). Решил переделать как вы скинули. Но не получилось. Прошу помощь еще разок )
function messages() {
$.ajax({
type: 'GET',
url: 'http://192.168.1.169:8081/messages',
success: function (data) { // Обработчик успещного ответа
$.parseJSON(JSON.stringify(data)).forEach(
function (obj) {
if (obj.user_id != undefined) {
var messages = document.querySelector('.wrap-tab-content');
var userId = obj.user_id;
var message = messages.querySelector('#' + userId);
if (message) {
messages.querySelector('#' + userId).innerHTML += `<p><b>${obj.user_id}:</b> ${obj.message}</p>`;
} else {
var newDiv = document.createElement('div');
newDiv.id = obj.user_id;
newDiv.innerHTML = `<p><b>${obj.user_id}:</b> ${obj.message}</p>`;
messages.appendChild(newDiv);
}
}
}
)
},
error: function (data, status) { // Обработчик ответа в случае ошибки
console.error(data, status);
}
});
}
//setInterval(messages, 4000);
|
Zamay,
пост 5 -- надо не messagesAll[message] везде а messagesAll[userId] |
| Часовой пояс GMT +3, время: 01:48. |