Json обновлять каждые x секунд SetInterval

Я сделал этот скрипт для получения информации json:

 $(document).ready(function(){

    $.ajax({
      url: 'url',
      dataType: 'json',
      cache: true,
      timeout: 30000,
      success: function(data) {

           //$('#output ul').append('
  • The feed loads fine'); $('#output ul').empty(); $.each(data.posts, function(i,data){ $('#output ul').append('
  • '+data.title+'

    '+data.text+'

  • '); }); }, error: function(){ $('#output ul').append('
  • Error'); } }); });
  • Но я хочу обновлять фид каждые х секунд. Я много читал об этом, но я могу это сделать.

    Как я могу это сделать?

    4
    И в чем проблема с setInterval?
    добавлено автор Viktor S., источник

    4 ответы

    var foo = function() {
        $.ajax({
          url: 'url',
          dataType: 'json',
          cache: true,
          timeout: 30000,
          success: function(data) {
    
               //$('#output ul').append('
  • The feed loads fine'); $('#output ul').empty(); $.each(data.posts, function(i,data){ $('#output ul').append('
  • '+data.title+'

    '+data.text+'

  • '); }); }, error: function(){ $('#output ul').append('
  • Error'); } }); setTimeout(foo, 3000); } foo();
  • 3000 - миллисекунды, которые вы хотите подождать, прежде чем снова вызвать функцию.

    2
    добавлено

    Используйте setInterval для повторного вызова блока кода и поместите свой код в некоторую функцию и передайте имя функции в setInterval первый параметр. Вы можете передавать анонимную функцию вместо создания новой функции, например repeatMe , но я бы предпочел сделать функцию, чтобы сделать код более читаемым.

    function repeatMe(){
     $.ajax({
      url: 'url',
      dataType: 'json',
      cache: true,
      timeout: 30000,
      success: function(data) {
    
           //$('#output ul').append('
  • The feed loads fine'); $('#output ul').empty(); $.each(data.posts, function(i,data){ $('#output ul').append('
  • '+data.title+'

    '+data.text+'

  • '); }); }, error: function(){ $('#output ul').append('
  • Error'); } }); } setInterval(repeatMe, 5000);
  • Edit It would be better to use setTimeout instead of setInterval in the success to send the next call for update after the first has finished its job. We will also put setTimeout in error to keep the repetive call for update.

    function repeatMe(){
     $.ajax({
      url: 'url',
      dataType: 'json',
      cache: true,
      timeout: 30000,
      success: function(data) {
           //$('#output ul').append('
  • The feed loads fine'); $('#output ul').empty(); $.each(data.posts, function(i,data){ $('#output ul').append('
  • '+data.title+'

    '+data.text+'

  • '); setTimeout(repeatMe, 5000); }); }, error: function(){ $('#output ul').append('
  • Error'); setTimeout(repeatMe, 5000); } }); }
  • 2
    добавлено
    Затем мы должны использовать setTimeout, так как вызов setInterval в успехе снова и снова будет умножать частоту вызова функции setInterval.
    добавлено автор Adil, источник
    Обновлено с помощью setTimeout, спасибо за предложение.
    добавлено автор Adil, источник
    Добро пожаловать.
    добавлено автор Adil, источник
    Не следует ли устанавливать тайм-аут внутри параметра success , чтобы функция вызывалась через 30 секунд после ее завершения?
    добавлено автор Dim13i, источник
    Да, я знаю, поэтому я сказал «установить тайм-аут» :) Конечно, это зависит от того, чего хочет пользователь.
    добавлено автор Dim13i, источник
    Вы забыли изменить setInterval на setTimeout . Кроме того, в настройке success я думаю, что было бы лучше поставить setTimout вне $. Each() .
    добавлено автор Dim13i, источник
    спасибо, это работает для меня.
    добавлено автор tom, источник
    setInterval(function(){
    
      $.ajax({
          url: 'url',
          dataType: 'json',
          cache: true,
          success: function(data) {
    
               //$('#output ul').append('
  • The feed loads fine'); $('#output ul').empty(); $.each(data.posts, function(i,data){ $('#output ul').append('
  • '+data.title+'

    '+data.text+'

  • '); }); }, error: function(){ $('#output ul').append('
  • Error'); } }); },30000); //30000 == 30 seconds
  • 1
    добавлено
    $(document).ready(function(){
        setInterval(function() {
           $.ajax({
             url: 'url',
             dataType: 'json',
             cache: true,
             timeout: 30000,
             success: function(data) {    
               //$('#output ul').append('
  • The feed loads fine'); $('#output ul').empty(); $.each(data.posts, function(i,data){ $('#output ul').append('
  • '+data.title+'

    '+data.text+'

  • '); }); }, error: function(){ $('#output ul').append('
  • Error'); } }); }, 1000 * x); });
  • Above code should work fine. Just put required number of seconds instead of x here: 1000 *x

    Just remember that you should pass a pointer to a function into setInterval as a first parameter. if you do simply setInterval($.ajax({...}), x) you actually say that function returned by $.ajax should be executed each x seconds. But it returns jQuery object, not a function. That is why in my code ajax is wrapped with function() {}

    1
    добавлено
    JavaScript Jobs — чат
    JavaScript Jobs — чат
    8 336 участник(ов)

    JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

    JavaScript.ru
    JavaScript.ru
    7 932 участник(ов)

    Сообщество сайта JavaScript.ru в Slack.

    pro.js
    pro.js
    4 675 участник(ов)

    Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

    Верстка сайтов HTML/CSS/JS/PHP
    Верстка сайтов HTML/CSS/JS/PHP
    3 439 участник(ов)

    Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

    JavaScript — русскоговорящее сообщество
    JavaScript — русскоговорящее сообщество
    3 269 участник(ов)

    Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

    JavaScript Noobs — сообщество новичков
    JavaScript Noobs — сообщество новичков
    2 484 участник(ов)

    Чат для новичков

    javascript_ru
    javascript_ru
    915 участник(ов)

    Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

    jsChat
    jsChat
    603 участник(ов)

    Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

    JavaScript for Zombies Chat
    JavaScript for Zombies Chat
    492 участник(ов)

    Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

    All That JS
    All That JS
    417 участник(ов)

    JS на русском