Как я могу использовать 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.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); } };
Вы можете поместить код для pinging сервера в функцию, а затем сделать что-то вроде этого:
setInterval('ping()',1000); //this will ping 1000 milliseconds or 1 second
Вам не нужно добавлять какое-либо случайное расширение. Существуют встроенные функции javascript setInterval и setTimeout для выполнения заданий с заданными интервалами. Вероятно, вы захотите сделать что-то вроде
function ajaxPing() { ... } setInterval("ajaxPing()", 1000); $(element).mousedown(ajaxPing);
С другой стороны, если вы действительно хотите делать pinging каждую секунду , вероятно, достаточно будет просто хранить ваши данные в переменных на mousedown
и отправлять их на следующий ping (это произойдет менее чем за секунду).