繁体   English   中英

多个ajax调用处理

[英]Multiple ajax call handling

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

  1. 向服务器发出ajax请求以检索某些信息。
  2. 在请求返回之前,会发出另一个请求。 第一个请求现在无效且已过期。

如何判断初始请求现在无效,返回时可以忽略。 我只想显示第二个请求的结果并忽略(或取消)第一个请求。

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

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

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

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

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

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'
        );
    });

});

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

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

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

我不想涉及服务电话,您可能无法始终控制服务定义。 我想看到这样的事情

$(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
                }
            }
        });
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM