2015-11-24 2 views
0

Мне нужно сделать запрос ajax каждые 10 секунд и обновить данные на стороне клиента.Как я могу выполнить цикл AsyncAjaxRequest в GWT?

Итак, я попробовал этот путь в моем onModuleLoad():

while (true) { 
    try { 
     someService.initTable(new AsyncCallback<SomeObject>() { 

        @Override 
        public void onFailure(Throwable caught) { 
        } 

        @Override 
        public void onSuccess(SomeObject result) { 
         initData(numbersTable, result); 
        } 
       }); 
      } catch (Exception e) { 
      } 
     } 

Но это идет в бесконечный цикл.

Я хотел бы получить что-то вроде этого

(function worker() { 
    $.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
     $('.result').html(data); 
    }, 
    complete: function() { 
     // Schedule the next request when the current one's complete 
     setTimeout(worker, 5000); 
    } 
    }); 
})(); 

ответ

1

Асинхронный вызовы в GWT выполнить сразу, и вернуться «позже». В вашем коде цикл while ничего не ждет, поэтому вы вызываете initTable() много раз в секунду, следовательно, бесконечный цикл.

Просто создайте таймер, который выполняется каждые 10 секунд.

final Timer timer = new Timer() { 

     @Override 
     public void run() { 
       try { 
       someService.initTable(new AsyncCallback<SomeObject>() { 

        @Override 
        public void onFailure(Throwable caught) { 
        } 

        @Override 
        public void onSuccess(SomeObject result) { 
         initData(numbersTable, result); 
        } 
        }); 
       } catch (Exception e) { 
       } 
     } 

}; 
timer.scheduleRepeating(10000); 
+0

Отлично смотрятся! Странно, что я не мог найти эту функцию в документах. – bosone

Смежные вопросы