多个ajax调用处理

时间:2009-02-06 23:32:30

标签: jquery ajax

我正在使用jQuery进行一些ajax调用,并想知道人们如何处理这种情况。

  1. 向服务器发出ajax请求以检索一些信息。
  2. 在请求返回之前,会发出另一个请求。第一个请求现在无效且已过期。
  3. 如何判断初始请求现在无效,返回时可以忽略。我只想显示第二个请求的结果并忽略(或取消)第一个请求。

5 个答案:

答案 0 :(得分:13)

jQuery从XmlHttpRequest的调用返回ajax()对象,我已经用它来实现你想要的,如下所示:

var lastRequest;
function getSomeData() {
    if(lastRequest) {
        lastRequest.abort();
        lastRequest = null
    }
    lastRequest = $.ajax(...);
}

净效应是,如果发出后续请求,则会忽略先前请求的响应。

答案 1 :(得分:2)

记录标识请求的变量(例如:“request_id”)。在每个新请求中为变量添加1。仅当服务器返回的request_id等于客户端上的变量时才处理请求。

答案 2 :(得分:0)

我之前从未遇到过这种情况,但您可以发送一个在发出请求时递增的密钥,并将密钥与响应一起发回。当响应到达时,您可以检查密钥以查看它是否符合您的预期。

var incrementor = 1;
var lastSent = 0;

jQuery(document).ready(function() {

    jQuery('a.submitter').click(function(event) {
        event.preventDefault();
        lastSent = incrementor;
        incrementor++;
        jQuery.post(
            'some-url.php',
            {
                'request-id': lastSent,
                'other-data': 'some-data'
            },
            function( data, textStatus ) {
                if( data.requestId == lastSent ) {
                    // Do stuff
                }
            },
            'json'
        );
    });

});

答案 3 :(得分:0)

“我如何判断初始请求现在无效”

你不...... 您在客户端层排队Ajax请求,并且在之前的完成对DOM的操作之前不要让它们激活...

您可以在我的博客上获取有关如何执行此操作的详细信息,其中包含“如何创建Ajax库”; http://ra-ajax.org/how-to-create-an-ajax-library-part-7-the-ra-ajax-class.blog

答案 4 :(得分:-1)

我不想涉及服务电话,您可能无法始终控制服务定义。我希望看到像这样的东西

$(function() {
    $('.ajaxButton').click(function() {
        $.currentCallId = (new Date()).getTime();

        $.ajax({
            type: "get",
            url: 'http://www.google.com/',
            beforeSend: function(xhr) {
                this.callId = $.currentCallId;
            },
            success: function(data) {
                if (this.callId === $.currentCallId) {
                    // process it
                } else {
                    // throw it out
                }
            }
        });
    });
});