Jump to content

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


Rezvitsky
 Share

Recommended Posts

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

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

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

 image.png.848098065c5e024ea3ab04ec2ce4869d.png

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

Link to comment
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];

Link to comment
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

Link to comment
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);

Link to comment
Share on other sites

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

Link to comment
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 и что за пробел в начале?

Link to comment
Share on other sites

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

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

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

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

Link to comment
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
Link to comment
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>';
 }

Link to comment
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>';
 }

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...