Jquery排队请求的时间

时间:2014-05-21 16:21:11

标签: jquery ajax queue

我有一个表单,用于向论坛用户发送消息。这些消息每隔35秒(安全策略论坛)发送一次jQuery $ .ajax post request ...

我在输入和textarea中对应的消息放置了名称和文本。我想要的方法:

按一下按钮"发送",用论坛消息的用户和文字发出请求。

点击按钮"发送",用论坛消息的用户和文字发出请求。

点击按钮"发送",用论坛消息的用户和文字发出请求。

点击按钮"发送",用论坛消息的用户和文字发出请求。

5 -......

这四个或更多请求同时在队列中。但是,

我需要运行第一个请求并等待35秒

运行第二个请求并等待35秒后

运行tirth请求并等待35秒后

运行第四个请求并等待35秒后

...

抱歉我的英语不好。

感谢您的回复

1 个答案:

答案 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
        });
    }
});

像这样的东西。希望这能让您了解如何继续。

JS FIDDLE DEMO