Jump to content
Rezvitsky

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

Recommended Posts

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

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

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

 image.png.848098065c5e024ea3ab04ec2ce4869d.png

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Только что, Mario сказал:

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

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

Share this post


Link to post
Share on other sites
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
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
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

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

Share this post


Link to post
Share on other sites
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

И ты назначил ид сообщению только в одном условии, если есть последнее, а в другое не вставил

Share this post


Link to post
Share on other sites
3 минуты назад, Mario сказал:

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

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

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

Share this post


Link to post
Share on other sites
3 часа назад, Rezvitsky сказал:

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

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

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

 image.png.848098065c5e024ea3ab04ec2ce4869d.png

 

На попробуй

test.js

Edited by Edward Nemirovskiy
  • Like 1

Share this post


Link to post
Share on other sites
9 часов назад, Edward Nemirovskiy сказал:

На попробуй

test.js

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

Edited by Rezvitsky

Share this post


Link to post
Share on other sites
9 часов назад, Edward Nemirovskiy сказал:

На попробуй

test.js

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

Share this post


Link to post
Share on other sites
2 минуты назад, Edward Nemirovskiy сказал:

Ок

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

image.png.252f2c5bd98c7320f38dfc5b24967771.png

Edited by Rezvitsky

Share this post


Link to post
Share on other sites
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>';
 }

Share this post


Link to post
Share on other sites
17 минут назад, Edward Nemirovskiy сказал:

Ок

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

Share this post


Link to post
Share on other sites
Только что, Mario сказал:

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

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

Share this post


Link to post
Share on other sites
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×