Rezvitsky 12 Report post Posted July 9, 2019 Привет, столкнулся с такой проблемой что когда я загружаю данные с сервера используя xhr они дублируются, перерыл javascript.ru но ответа не нашел. Вот сам код: https://gist.github.com/Rezvitsky/a719e29e07465b5e9f1425307f520ed2 Вот пример ошибки: Share this post Link to post Share on other sites
Mario 51 Report post Posted July 9, 2019 А чего им не дублироваться, если не ставиться условия от какой даты/идентификатора сообщения? Оно одно и тоже тебе подгружает каждую секунду, ещё и по тупому, как в вии. Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 9, 2019 Только что, Mario сказал: А чего им не дублироваться, если не ставиться условия от какой даты/идентификатора сообщения? Оно одно и тоже тебе подгружает каждую секунду, ещё и по тупому, как в вии. я тоже думал проверку на идентификатор сделать но не знаю как реализовать Share this post Link to post Share on other sites
Mario 51 Report post Posted July 9, 2019 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]; Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 9, 2019 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 Share this post Link to post Share on other sites
Mario 51 Report post Posted July 9, 2019 Только что, Rezvitsky сказал: Если я тебя правильно понял то у меня вот так получилось: https://gist.github.com/73a22f6adf537795a41922ff9059f8ae Поменяй там класс на свой, как я выше написал Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 9, 2019 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); Share this post Link to post Share on other sites
Mario 51 Report post Posted July 9, 2019 И ещё если новых сообщений будет более одного, то будет проблемы из-за такого вывода, так что что бы работало нормально ещё при условии наличия последнего ид меняй сортировку с DESC на ASC или как там стоит, а то оно не правильно выведет, если будет более 1 сообщения, ибо в промежутки оно его не вставит. Или правильный вывод делать на js Share this post Link to post Share on other sites
Mario 51 Report post Posted July 9, 2019 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 и что за пробел в начале? Share this post Link to post Share on other sites
Mario 51 Report post Posted July 9, 2019 И ты назначил ид сообщению только в одном условии, если есть последнее, а в другое не вставил Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 9, 2019 3 минуты назад, Mario сказал: И ещё если новых сообщений будет более одного, то будет проблемы из-за такого вывода, так что что бы работало нормально ещё при условии наличия последнего ид меняй сортировку с DESC на ASC или как там стоит, а то оно не правильно выведет, если будет более 1 сообщения, ибо в промежутки оно его не вставит. Или правильный вывод делать на js Вот сделал как ты сказал: https://gist.github.com/f5b07445ce1a802d5ac4f908e1a96bf4 попрежнему дублирует Share this post Link to post Share on other sites
Edward Nemirovskiy 64 Report post Posted July 9, 2019 (edited) 3 часа назад, Rezvitsky сказал: Привет, столкнулся с такой проблемой что когда я загружаю данные с сервера используя xhr они дублируются, перерыл javascript.ru но ответа не нашел. Вот сам код: https://gist.github.com/Rezvitsky/a719e29e07465b5e9f1425307f520ed2 Вот пример ошибки: На попробуй test.js Edited July 9, 2019 by Edward Nemirovskiy 1 Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 10, 2019 (edited) 9 часов назад, Edward Nemirovskiy сказал: На попробуй test.js спасибо, но вот когда я удалаляю транзакцию она появляется в первой строчке Edited July 10, 2019 by Rezvitsky Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 10, 2019 9 часов назад, Edward Nemirovskiy сказал: На попробуй test.js Извиняюсь все хорошо работает просто я забыл вставить функцию удаления Share this post Link to post Share on other sites
Edward Nemirovskiy 64 Report post Posted July 10, 2019 10 минут назад, Rezvitsky сказал: Извиняюсь все хорошо работает просто я забыл вставить функцию удаления Ок Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 10, 2019 (edited) 2 минуты назад, Edward Nemirovskiy сказал: Ок единственный недочет с заглушкой. Edited July 10, 2019 by Rezvitsky Share this post Link to post Share on other sites
Edward Nemirovskiy 64 Report post Posted July 10, 2019 12 минут назад, Rezvitsky сказал: единственный недочет с заглушкой. } 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>'; } Share this post Link to post Share on other sites
Mario 51 Report post Posted July 10, 2019 17 минут назад, Edward Nemirovskiy сказал: Ок Действительно самое быстрое решение, но юзер всё равно подгружает ненужные сообщения Share this post Link to post Share on other sites
Edward Nemirovskiy 64 Report post Posted July 10, 2019 Только что, Mario сказал: Действительно самое быстрое решение, но юзер всё равно подгружает ненужные сообщения но это уже в беке надо формулировать вывод Share this post Link to post Share on other sites
Rezvitsky 12 Report post Posted July 10, 2019 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>'; } такая же ситуация Share this post Link to post Share on other sites