jQuery,简单的轮询例子

我正在学习jQuery,我试图find一个简单的代码示例,将查询一个条件的API。 (即每隔几秒钟请求一个网页并处理结果)

我熟悉如何在jQuery中执行AJAX,我似乎无法find让它在“计时器”上执行的“正确”方法。

function doPoll(){ $.post('ajax/test.html', function(data) { alert(data); // process results here setTimeout(doPoll,5000); }); } 

这里有一篇关于使用jQuery 进行长轮询 (长期持久HTTP请求)的文章。 从这篇文章派生的代码片段:

 (function poll() { setTimeout(function() { $.ajax({ url: "/server/api/function", type: "GET", success: function(data) { console.log("polling"); }, dataType: "json", complete: poll, timeout: 2000 }) }, 5000); })(); 

这只会在ajax请求完成后才会发出下一个请求。

上面的变化会在首次调用等待/超时间隔之前立即执行。

 (function poll() { $.ajax({ url: "/server/api/function", type: "GET", success: function(data) { console.log("polling"); }, dataType: "json", complete: setTimeout(function() {poll()}, 5000), timeout: 2000 }) })(); 
 function poll(){ $("ajax.php", function(data){ //do stuff }); } setInterval(function(){ poll(); }, 5000); 

从ES6开始,

 var co = require('co'); var $ = require('jQuery'); // because jquery doesn't support Promises/A+ spec function ajax(opts) { return new Promise(function(resolve, reject) { $.extend(opts, { success: resolve, error: reject }); $.ajax(opts); } } var poll = function() { co(function *() { return yield ajax({ url: '/my-api', type: 'json', method: 'post' }); }).then(function(response) { console.log(response); }).catch(function(err) { console.log(err); }); }; setInterval(poll, 5000); 
  • 不使用recursion(函数堆栈不受影响)。
  • 在setTimeout-recursion需要tail-call优化的地方不会受到影响。
 function make_call() { // do the request setTimeout(function(){ make_call(); }, 5000); } $(document).ready(function() { make_call(); });