Я изучаю jQuery и пытаюсь найти простой пример кода, который будет опрашивать API на предмет условия. (т.е. запрашивать веб-страницу каждые несколько секунд и обрабатывать результаты)
Я знаком с тем, как использовать AJAX в jQuery, я просто не могу найти «правильный» способ заставить его работать по «таймеру».
setTimeout
а некоторые использовалиsetInterval
. Почему одно предпочтительнее другого?setTimeout
в обработчике успеха, но вместо этого всегда связывайте вызов ajax с jQuery . Как это:$.post('ajax/test.html') .done(function(data) { /* process */ }) .always(function() { setTimeout(doPoll, 5000); });
Вот полезная статья о длительном опросе (длительном HTTP-запросе) с использованием jQuery. Фрагмент кода, взятый из этой статьи:
Это сделает следующий запрос только после завершения запроса ajax.
Вариант вышеуказанного, который будет выполняться немедленно при первом вызове перед соблюдением интервала ожидания / тайм-аута.
источник
let is_success = false; (function poll() { let timeout = setTimeout(function() { $.ajax({ url: resp.location, type: "GET", success: function(data) { if(YOUR_CONDITION) { is_success=true; } }, dataType: "json", complete: poll, timeout: 2000 }) }, 5000); if(is_success) { console.log("ending poll"); window.clearTimeout(timeout); } })();
Из ES6,
источник
источник
setInterval(poll, 5000);
источник
jQuery.Deferred () может упростить управление асинхронной последовательностью и обработкой ошибок.
Это элегантный подход, но есть некоторые подводные камни ...
then()
немедленно провалился , обратный вызов должен возвращать другой объект, который можно использовать (возможно, другойDeferred
), что и делают строки sleep и ajax.источник
initiate_polling
он завершился.new Promise( resolve => setTimeout(resolve,1000) ).then( () => alert("done") )
Это решение:
Минимальная версия jQuery - 1.12.
источник
источник
Я создал для этого крошечный плагин JQuery. Вы можете попробовать:
https://www.npmjs.com/package/jquerypoll
источник