js function异步执行改同步-ajax异步完成后再执行操作
今天遇到一个问题,就是想将统一的处理方法放到一个JS function函数中,于是写了方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function changeandajax(data,url) { layer.confirm('确定要删除选中?', function(index){ var ids=new Array(); for (var i = 0; i < data.length; i++) { ids.push(data[i].id); } $.post(url, {id:ids.join(",")}, function (result) { layer.msg(result.msg, {}, function () { res(result.code) }); }); }); } |
这个是统一的多选删除,外面调用就是简单的:
1 2 |
isok = changeandajax(data,'http://blog.21863.cn'); alert(isok); |
于是乎就出现了问题,就是在ajax未成功之前就执行了alert命令,有时候甚至是alert执行早于函数,并不是认为的一行一行执行的顺序,好生奇怪!问了同事才知道原来这样的就是异步执行或异步请求了,要改成同步执行才可以!话不多说直接上修改后端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function changeandajax(data,url) { return new Promise((res,rel) => { layer.confirm('确定要删除选中?', function(index){ var ids=new Array(); for (var i = 0; i < data.length; i++) { ids.push(data[i].id); } $.post(url, {id:ids.join(",")}, function (result) { layer.msg(result.msg, {}, function () { res(result.code) }); }); }); }) } |
前台调用也要修改成:
1 2 3 4 5 |
changeandajax(data,'{:url("AdminOrder/delete")}').then(result => { if(result==0){ table.reload('yingTable'); } }); |
这样就完成了ajax异步完成后再执行表格刷新操作,完美解决问题!
记录下技术小结,以后必定会遇到这样的问题!