我有一个表单,用于向论坛用户发送消息。这些消息每隔35秒(安全策略论坛)发送一次jQuery $ .ajax post request ...
我在输入和textarea中对应的消息放置了名称和文本。我想要的方法:
按一下按钮"发送",用论坛消息的用户和文字发出请求。
点击按钮"发送",用论坛消息的用户和文字发出请求。
点击按钮"发送",用论坛消息的用户和文字发出请求。
点击按钮"发送",用论坛消息的用户和文字发出请求。
5 -......
这四个或更多请求同时在队列中。但是,
我需要运行第一个请求并等待35秒
运行第二个请求并等待35秒后
运行tirth请求并等待35秒后
运行第四个请求并等待35秒后
...
抱歉我的英语不好。
感谢您的回复
答案 0 :(得分:0)
在没有任何代码可以使用的地方是我的建议。您将创建并维护一个数组,其中包含进行将发送消息的ajax调用所需的所有相关信息。
每次进行限定点击时,数组都会使用其他项目进行更新。第一次单击(当数组为空时进行的任何单击)从计数器开始。在数组中的每个请求(第一个元素)之后,使用.shift()
方法从数组中删除该元素。如果数组为空,则计数器停止。
$(function() {
var requests = [],
sender,
url = 'url-to-send-ajax-call-to';
//Have as many of these as the number of different buttons the user may click
$('button').on('click', scheduleRequest);
function scheduleRequest() {
//in here 'this' references the button that was clicked
//if it contains data, use it.
requests.push({
something:$(this).data('something')/*data from button*/,
email:'ab@c.com',
message:'whatever other parameters you want to send'
});
//if setInterval is not running
if( !sender ) {
//fire it up and store a reference to it
sender = setInterval(sendRequest, 35000);
}
}
function sendRequest() {
$.post( url, requests[ 0 ], function( data ) {
requests.shift(); // remove request just processed
//if no more requests
if( requests.length === 0 ) {
//stop setInterval
clearInterval( sender );
sender = undefined;
}
}).fail(function() {
// Do something if call fails
});
}
});
像这样的东西。希望这能让您了解如何继续。