Перейти к содержанию
CMSTOOLS.org - форум поддержки и развития CMS

JavaScript XHR проверка на новые данные.


Рекомендуемые сообщения

Привет, столкнулся с такой проблемой что когда я загружаю данные с сервера используя xhr они дублируются, перерыл javascript.ru но ответа не нашел. 

Вот сам код: https://gist.github.com/Rezvitsky/a719e29e07465b5e9f1425307f520ed2

Вот пример ошибки:

 image.png.848098065c5e024ea3ab04ec2ce4869d.png

 

Ссылка на комментарий
Поделиться на другие сайты

А чего им не дублироваться, если не ставиться условия от какой даты/идентификатора сообщения? Оно одно и тоже тебе подгружает каждую секунду, ещё и по тупому, как в вии.

Ссылка на комментарий
Поделиться на другие сайты

Только что, Mario сказал:

А чего им не дублироваться, если не ставиться условия от какой даты/идентификатора сообщения? Оно одно и тоже тебе подгружает каждую секунду, ещё и по тупому, как в вии.

я тоже думал проверку на идентификатор сделать но не знаю как реализовать

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, Rezvitsky сказал:

я тоже думал проверку на идентификатор сделать но не знаю как реализовать

Судя по дате на скрине новые выводятся выше, тогда там должно быть не append, а prepend, при добавлении к уже существующим. Делай там проверку if(last_id.lenght) prepend else append и ниже нужные строки по поводу вопроса.
 

Спойлер

var last_id = $('.swipeout:first'), url = api_transaction + '?access_token=' + accessToken + '&last_id=' + (last_id.lenght ? last_id.attr('message-id') : 0);
<li class="swipeout" message-id="' + value.id + '">

Также учитывай, что ты вызываешь новые запросы, а новые сообщения ещё от старого запроса могут не вывестись циклом, делай проверку, жди окончания выполнения через $.when, допустим. Это ведь не пхп, тут ждать отставших не будут. Ну и в пхп, которого тут не видно делай проверку что бы message_id > поступивший через (int) $_GET['last_id];

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Mario сказал:

Судя по дате на скрине новые выводятся выше, тогда там должно быть не append, а prepend, при добавлении к уже существующим. Делай там проверку if(last_id.lenght) prepend else append и ниже нужные строки по поводу вопроса.
 

  Скрыть контент

 var last_id = $('.message_class:first'), url = api_transaction + '?access_token=' + accessToken + '&last_id=' + (last_id.lenght ? last_id.attr('message-id') : 0);
<li class="swipeout" message-id="' + value.id + '">

Также учитывай, что ты вызываешь новые запросы, а новые сообщения ещё от старого запроса могут не вывестись циклом, делай проверку, жди окончания выполнения через $.when, допустим. Это ведь не пхп, тут ждать отставших не будут.

Если я тебя правильно понял то у меня вот так получилось: https://gist.github.com/73a22f6adf537795a41922ff9059f8ae

Ссылка на комментарий
Поделиться на другие сайты

Только что, Rezvitsky сказал:

Если я тебя правильно понял то у меня вот так получилось: https://gist.github.com/73a22f6adf537795a41922ff9059f8ae

Поменяй там класс на свой, как я выше написал

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Mario сказал:

Поменяй там класс на свой, как я выше написал

ошибка в этой строчке: v ar last_id = $('.page-transaction:first '), url = api_transaction + '?access_token=' + accessToken + '&last_id=' + (last_id.lenght ? last_id.attr('message-id') : 0);

Ссылка на комментарий
Поделиться на другие сайты

И ещё если новых сообщений будет более одного, то будет проблемы из-за такого вывода, так что что бы работало нормально ещё при условии наличия последнего ид меняй сортировку с DESC на ASC или как там стоит, а то оно не правильно выведет, если будет более 1 сообщения, ибо в промежутки оно его не вставит. Или правильный вывод делать на js

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Rezvitsky сказал:

ошибка в этой строчке: v ar last_id = $('.page-transaction:first '), url = api_transaction + '?access_token=' + accessToken + '&last_id=' + (last_id.lenght ? last_id.attr('message-id') : 0);

Причем тут page-transaction и что за пробел в начале?

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Mario сказал:

И ещё если новых сообщений будет более одного, то будет проблемы из-за такого вывода, так что что бы работало нормально ещё при условии наличия последнего ид меняй сортировку с DESC на ASC или как там стоит, а то оно не правильно выведет, если будет более 1 сообщения, ибо в промежутки оно его не вставит. Или правильный вывод делать на js

Вот сделал как ты сказал: https://gist.github.com/f5b07445ce1a802d5ac4f908e1a96bf4

попрежнему дублирует

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Rezvitsky сказал:

Привет, столкнулся с такой проблемой что когда я загружаю данные с сервера используя xhr они дублируются, перерыл javascript.ru но ответа не нашел. 

Вот сам код: https://gist.github.com/Rezvitsky/a719e29e07465b5e9f1425307f520ed2

Вот пример ошибки:

 image.png.848098065c5e024ea3ab04ec2ce4869d.png

 

На попробуй

test.js

Изменено пользователем Edward Nemirovskiy
  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Edward Nemirovskiy сказал:

На попробуй

test.js

спасибо, но вот когда я удалаляю транзакцию она появляется в первой строчкеimage.png.baac1b6bf1863ed27def4ac634f92ee6.pngimage.png.3c3644b5627df7860b3171dbd4e90814.png

Изменено пользователем Rezvitsky
Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Edward Nemirovskiy сказал:

На попробуй

test.js

Извиняюсь все хорошо работает просто я забыл вставить функцию удаления

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Edward Nemirovskiy сказал:

Ок

единственный недочет с заглушкой.

image.png.252f2c5bd98c7320f38dfc5b24967771.png

Изменено пользователем Rezvitsky
Ссылка на комментарий
Поделиться на другие сайты

12 минут назад, Rezvitsky сказал:

единственный недочет с заглушкой.

image.png.252f2c5bd98c7320f38dfc5b24967771.png

} else if(!$('.swipeout').html()){
  $('#page-transaction').html('<li><div class="item-content referal">No transactions</div></li>');
}

вместо 

} else {
          document.getElementById('page-transaction').innerHTML = '<li><div class="item-content referal">No transactions</div></li>';
 }

Ссылка на комментарий
Поделиться на другие сайты

Только что, Mario сказал:

Действительно самое быстрое решение, но юзер всё равно подгружает ненужные сообщения

но это уже в беке надо формулировать вывод 

Ссылка на комментарий
Поделиться на другие сайты

31 минуту назад, Edward Nemirovskiy сказал:

} else if(!$('.swipeout').html()){
  $('#page-transaction').html('<li><div class="item-content referal">No transactions</div></li>');
}

вместо 

} else {
          document.getElementById('page-transaction').innerHTML = '<li><div class="item-content referal">No transactions</div></li>';
 }

такая же ситуация

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...