问题描述
Ajax作为可以进行异步传输的技术,让许多要使用到前后台数据交换的功能变得简单。但是新手也会遇到一个小坑,而且正是来自“异步”。
代码就不贴出来了,简单描述一下。使用框架tp5.1,用jq写了一段功能。实际使用功能时,特效出现的顺序有误,控制台没有报错。
解决
经过断点排查,发现是代码运行的逻辑顺序有问题。而问题的核心就是中间的一段ajax代码。
由于ajax代码是异步实现的,当后台还没有返回值时,前台继续运行ajax之后的jq代码。等后台返回值时,黄花菜都凉了。所以要解决问题只能去掉ajax代码运行的异步性,tp5.1中去掉异步性的代码如下:
$.ajaxSettings.async = false;
该代码写在ajax的代码前就能去掉ajax的异步性,从而解决问题。
思考
ajax的异步性确实是它的优势之一,但是其实把它只当成一个前后台数据的桥梁也是不错的选择。而且在去掉异步性后,某些场景可以大大提升稳定性,防止某些皮孩子或者暴躁老哥疯狂点击按钮后导致崩溃。
在使用了ajax的jq代码中,如果出现功能逻辑顺序错误,可以朝这个方向进行排查。