【发布时间】:2009-03-31 04:55:47
【问题描述】:
如何使用 jQuery 不断运行 PHP 脚本并每秒获得响应,并将鼠标上的少量数据发送到同一个脚本?
我真的必须添加一些随机扩展才能让这样一个简单的计时器工作吗?
【问题讨论】:
-
每秒得到响应有点过分...你能把它改成至少 15 秒吗?
如何使用 jQuery 不断运行 PHP 脚本并每秒获得响应,并将鼠标上的少量数据发送到同一个脚本?
我真的必须添加一些随机扩展才能让这样一个简单的计时器工作吗?
【问题讨论】:
迭代是人,递归是神。
-L. Peter Deutsch
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 and setTimeout 用于在设定的时间间隔内做事。您可能想要做类似的事情
function ajaxPing() {
...
}
setInterval("ajaxPing()", 1000);
$(element).mousedown(ajaxPing);
另一方面,如果您真的想每秒进行一次 ping 操作,只需将数据存储在 mousedown 上的变量中并在下一次 ping 时提交就足够了(即将在不到一秒的时间内发生)。
【讨论】: