JS同步执行两个Get方法

20190516更新:实际上,从后台由多个DTO组成VO展示出来更为靠谱


起因:先取出table User的id后再去table Role里面查询数据,最初设计如下:
table User的请求

        $.ajax({
            url:  ctx + "/account/searchAccount",
            type: 'get',
            data: {
                "keyword": keyword
            },
            async: false,
            success:function (response) {
                var tbody=document.getElementById("account");
                tbody.innerHTML="";
                response.data.forEach(function(obj, i){
                    var id=obj.id;
                    var roleDes=searchAccountRole(obj.id);
                    var html="<tr name='"+obj.name+"'><td>"+obj.id+"</td><td>"+obj.name+"</td><td>"+obj.email+"</td><td id='"+obj.id+"'>"+roleDes+"</td><td><button type='button' class='btn btn-danger' name="+obj.name+">删除账号</button></td></tr>";
                    tbody.innerHTML+=html;
                });
            },
            error:function(response){}
        });

table Role的Get请求

function searchAccountRole(id){
    $.ajax({
        url:ctx+ "/account/searchAccountRole",
            type: 'Get',
            data:{
            "id":id
        },
        success:function (response) {
            document.getElementById(id).innerHTML=response.data;
        }
    }
    )
}

现象:查询后,两个Get方法是异步的,这样就会导致查出来的Role信息无法展示在页面上

原因:JS并不像Java语言,调用方法时一个个套下去直到拿到返回值,所以我们要将此类请求声明为同步执行

解决:将第二个Get请求写在第一个请求success里面,并且同步执行,代码如下:

        $.ajax({
            url:  ctx + "/account/searchAccount",
            type: 'get',
            data: {
                "keyword": keyword
            },
            async: false,
            success:function (response) {
                var tbody=document.getElementById("account");
                tbody.innerHTML="";
                var roleDes='';
                response.data.forEach(function(obj, i){
                    var id=obj.id;
                    $.ajax({
                        url:ctx+ "/account/searchAccountRole",
                        type: 'Get',
                        data:{
                            "id":id
                        },
                        async:false,
                        success:function (response) {
                            roleDes=response.data;
                        }
                    });
                    var html="<tr name='"+obj.name+"'><td>"+obj.id+"</td><td>"+obj.name+"</td><td>"+obj.email+"</td><td id='"+obj.id+"'>"+roleDes+"</td><td><button type='button' class='btn btn-danger' name="+obj.name+">删除账号</button></td></tr>";
                    tbody.innerHTML+=html;
                });
            },
            error:function(response){}
        });

扩展延伸:AJAX、同步执行、异步执行
日后再更新...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数就好比是你厌倦了重复差不多内容的功能,这些功能都会耗费很多同样的代码。 为了简洁起见,可以把这些内容都封装为函...
    TianAff阅读 254评论 2 0
  • 有些时候,人做出一些选择,并不是因为正确,而是因为想得到一种解脱,因为长久地压抑,克制,隐忍,或是种种无法忠于自己...
    素家老二阅读 206评论 0 0
  • 假期还有一天就要结束了,快乐的时光总是过的太快,不知不觉已经过去七天了。今天我们从姥姥家回来了,因为这几天假期...
    M张皓轩M阅读 255评论 0 0
  • 过往两周,是阅读班自开学以来令我印象的两周,有几个重点值得和大家细细回顾,当然也会在5月20日的家长分享会与大家分...
    团的花园阅读 207评论 0 2