2013-08-19 3 views
3

Я использую jQuery's ajax() для получения информации. Я вызываю метод, когда запрос выполняется успешно. Вот код:Рекурсивные запросы ajax()

function recursively_ajax(){ 
    console.warn("begin"); 
    $.ajax({ 
     type:"GET", 
     url: "./JvmInfoClass", 
     success: function(data){ 
      console.warn("get jvm info success"); 
      recursively_ajax(); 
     } 
    }); 
} 

recursively_ajax(); 

Я делаю нить сна 3 секунды в фоновом режиме. Но консоль печатает сообщение непрерывно не через 3 секунды. Почему это?

+0

Попробуйте 'если (данные) {console.log(); } ', а также общий серверный код. –

+2

Ваш сервер кэширует ответ и возвращает его сразу после первого? то есть есть 3-секундная задержка в первый раз после очистки кеша браузера. –

+0

Пятно на. Проблема решена. Большое спасибо. – damon

ответ

7

Вы можете попробовать это с асинхронным Ajax вызова: ложные

var counter=0; 
function recursively_ajax() 
{ 
var pass_data=5; 
var chartMenu=['VTR','NC','RC','TOCU','TOCO','TR','COA','MP']; 
$.ajax({ 
     type:"POST", 
     async:false, // set async false to wait for previous response 
     url: "url to server", 
     dataType:"json", 
     data:{dataMenu:pass_data}, 
     success: function(data) 
     { 
      counter++; 
      if(counter < chartMenu.length){ 
       recursively_ajax(); 
      } 
     } 
    }); 
}  
recursively_ajax();   
+0

Спасибо, что работает! – Prasanna

+0

@Prasanna, рад, что это сработает для вас, удачи –

+0

@Всегда солнечно Можете ли вы рассказать мне о большом размере массива (например, для 70), порядок ответов ajax будет таким же, как порядок массива, используя ваш метод? – user1788736

4

В этом случае ошибка указана в коде на стороне сервера, так как сервер должен отсылать ответ только через 3 секунды.

Но я бы рекомендовал использовать setTimeout() на стороне клиента, чтобы ограничить частоту запросов

Попробуйте

function recursively_ajax(){ 
    console.warn("begin"); 
    $.ajax({ 
     type:"GET", 
     url: "./JvmInfoClass", 
     success: function(data){ 
      console.warn("get jvm info success"); 
      setTimeout(recursively_ajax, 3000) 
     } 
    }); 
} 
recursively_ajax(); 
+0

+1 для дросселирования на стороне клиента. –

3

Это проблема кэширование браузера, я добавляю дату в URL или установить кэш АЯКС: ложь, проблема решена. Спасибо всем.