2009-11-03 3 views
0

Можно ли опубликовать пример кода, где Theres бегущую таймер (JavaScript SetTimeout) и делает поиск данных ..JQuery GetJSON внутри SetTimeout Таймер

в основном то, что я этот таймер делает для отображения новых сообщений ..

myFunction(param){ 

//data retrieval operation 
//using getJSON.. call displaydata() base on param 

settimeout("myFunction()", param, 1000); 

} 

function displaydata(param){ 

//processing 
alert('test')} 

Должен ли я использовать getJSON? Я думаю, что проблема с асинхронным вызовом.

ответ

2

Две вещи, которые я заметил, вам нужно исправить в своем коде.

  • setTimeout() метод имеет некоторые неправильные аргументы
  • Ваш асинхронный getJSON вызов создает условия гонки между следующий тайм-аут и результат метода getJSON. Вместо этого:

.

function yourFunction(params) { 
    jQuery.getJSON("url", {data}, function(data, textStatus){ 
     // handle your JSON results 

     // Call the timeout at the end of the AJAX response 
     // This prevents your race condition 
     setTimeout(function(){ 
      yourFunction(params); 
     }, 1000); 
    } 
} 

setTimeout(function(){ 
    yourFunction(params); 
}, 1000); 
0

Первый параметр должен быть литералом функции или ссылкой на функцию, а вторым параметром должно быть миллисекунды.

setTimeout(function() { 
    getData('param') 
}, 1000); 

function getData() { 
    $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", 
     function(data){ 
      $.each(data.items, function(i,item){ 
      $("<img/>").attr("src", item.media.m).appendTo("body"); 
      if (i == 3) return false; 
      }); 
     }); 
} 

Я не использую фактический аргумент в моем примере, но вы можете легко его обновить, чтобы сделать это. Также я не был уверен, что вы проводили опрос (это не делает опрос/рекурсивный вызов).

+0

Есть ли шансы, что данные обратного вызова будут потеряны? Потому что иногда установочный интервал был первым перед обратным вызовом. – h3n

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