jQuery不断ping Ajax响应
我如何使用jQuery不断运行PHP脚本并每秒获取响应,并将鼠标上的少量数据发送到同一个脚本?
我真的需要添加一些随机扩展才能让这么简单的计时器工作吗?
迭代是人,是递归神圣。
-L。 彼得德意志
var req = function () { $.ajax({ url : 'http://example.com/yourscript.php', complete : function () { req(); } }); }; req();
如果不明显,上述内容将在前一个请求完成后立即生成新请求。 您还可以在请求之间设置1秒的延迟,如下所示:
var req = function () { $.ajax({ url : 'http://example.com/yourscript.php', complete : function () { setTimeout(function () { req(); }, 1000); } }); }; req();
function doAjax(data){ $.ajax({ type: "POST", data: data, url: 'http://example.com/yourscript.php', }); } // Set interval setInterval('doAjax()',1000); // Set event handler $(document).mousedown(function(){ doAjax({key: 'value'}); });
如果您不想捕获整个页面上的点击,可以用实际元素替换$(document)。
如果你正在寻找回调等,你可以使用ajax函数做更多的事情: http : //docs.jquery.com/Ajax/jQuery.ajax
//你需要的所有ping:
ping.pushCallback(function() { YourCallback(); }); $.data(document.body, 'data_ping', ping);
// ———————————————— —— //脚本
$.ping = function(url, options) { this.url = url; this.options = $.extend({ delay: 2000, dataType: 'json', timeout: 10000, data: {}, callbacks: [] }, options); this.queue(); }; $.ping.prototype = { queue: function() { var self = this; setTimeout(function() { self.send(); }, self.options.delay); }, send: function() { var self = this; $.ajax(self.url, { success: function(data) { for (var i in self.options.callbacks) { self.options.callbacks[i](data); } }, complete: function() { self.queue(); }, dataType: self.options.dataType, data: self.options.data, type: "GET", cache: false, timeout: self.options.timeout }); }, setData: function(key, value) { this.options.data[key] = value; }, pushCallback: function(callback) { this.options.callbacks.push(callback); } };
您可以将用于ping服务器的代码放在函数中,然后执行以下操作:
setInterval('ping()',1000); //this will ping 1000 milliseconds or 1 second
您不必添加一些随机扩展名。 有本机javascript函数setInterval和setTimeout用于按设定的时间间隔执行操作。 你可能想要做类似的事情
function ajaxPing() { ... } setInterval("ajaxPing()", 1000); $(element).mousedown(ajaxPing);
另一方面,如果你真的想每秒进行一次 ping操作,那么将数据存储在mousedown
中的变量中并在下一次ping时提交它可能就足够了(这将在不到一秒的时间内完成)。