小编典典

按顺序进行jQuery ajax调用

ajax

我想以这种方式进行Ajax调用的堆栈:call(n-1)完成后,call(n)开始…

由于多种原因,我无法使用 async:false

  • 一些请求可能是 jsonp (最相关)
  • 我还有其他一些可能同时起作用的ajax请求。
  • 浏览器被阻止

我无法以这种方式链接我的请求:

$.post('server.php', {param:'param1'}, function(data){
        //process data
    $.post('server.php', {param:'param2'}, function(data){
        //process data
    });
});

因为请求的数量和参数是根据用户输入动态创建的。

一个小例子说明了我的问题。

您将看到服务器响应顺序是随机的,我要实现的是按顺序排列

Response to arg1
Response to arg2
Response to arg3
Response to arg4
Response to arg5
Response to arg6

任何帮助将不胜感激,谢谢。


阅读 330

收藏
2020-07-26

共1个答案

小编典典

好的,jQuery Ajax返回Deferred
Object
,这可以帮助您实现这一目标。

这是操作方法:

var args = ['arg1','arg2','arg3','arg4','arg5','arg6'];

deferredPost(0, 5);

function deferredPost(index, max){    
    var delay = Math.random()*3;
    if (index<max){
        return $.post('/echo/html/', {html:('Response to '+args[index]), delay:delay}, 
        function(data){
            $('#response').append(data+'<br>');
        }).then(function(){
            deferredPost(index+1, max);
        });
    } else {
        return $.post('/echo/html/', {html:('Response to '+args[index]), delay:delay}, 
        function(data){
            $('#response').append(data+'<br>');
        });
    }
}

演示

在这里,我用 那么 函数。

我还建议多读一些有关延迟对象的知识,它们可以解决几个常见问题。

2020-07-26