多个ajax按顺序请求

有时候在业务中数据的请求是有先后顺序的,但是默认的ajax都是异步执行的,实现同步请求的话只需要设置 async: false,

方法一:

示例如下:

<script>
    var url1 = '/center/Report/test1';
    var url2 = '/center/Report/test2';
    var url3 = '/center/Report/test3';

    console.log('1-start');
    $.ajax({
        url: url1,
        type: 'GET',
        async: false,
        cache: false,
        success: function(data) {
            console.log('1-success');
        },
    });
    console.log('1-end');

    console.log('2-start');
    $.ajax({
        url: url2,
        type: 'GET',
        async: false,
        cache: false,
        success: function(data) {
            console.log('2-success');
        },
    });
    console.log('2-end');

    console.log('3-start');
    $.ajax({
        url: url3,
        type: 'GET',
        async: false,
        cache: false,
        success: function(data) {
            console.log('3-success');
        },
    });
    console.log('3-end');

</script>

为了验证顺序,我们需要在后端做延迟响应处理。如下:

	public function test1(){
        sleep(10);
        return $this->jsonSucess([1]);
    }

    public function test2(){
        sleep(2);
        return $this->jsonSucess([2]);
    }

    public function test3(){
        sleep(5);
        return $this->jsonSucess([3]);
    }

打印的结果为:

在这里插入图片描述

可见是严格按照顺序来的。

方法二:
使用jquery 的 $.when()方法
要求:jQuery > 1.5.0

// ajax 其他参数
var options = {type: 'GET', data: {name: 'rao'}};

$.when(
    $.ajax(url1, options),
    $.ajax(url2, options),
    $.ajax(url3, options),
).done(function(return1, return2, return3){
    console.log(return1);// url1 的返回
    console.log(return2);// url2 的返回
    console.log(return3);// url3 的返回
}).fail(function(obj, statusString, errorMsg){
	console.log(obj);// obj
    console.log(statusString);// error
    console.log(errorMsg);// Not Found
});

后端代码,依然是上面的
返回结果也是按照顺序的。

成功则返回:
在这里插入图片描述
在这里插入图片描述
失败则返回:
把 test2() 方法注释掉,使其无法被访问到。
这样就是,第一个请求通过,第二个请求失败,第三个请求通过;是的,第三个请求还是会被发出去。
在这里插入图片描述
打印的信息
在这里插入图片描述
既然所有的请求都会被发出去,那么如果有多个请求失败,fail 回调的信息就是最后一个失败的信息了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值