今天写代码遇到了一个ajax默认异步请求而导致的bug
本来的代码是这样,用ajax向后端请求数据,然后把请求到的数据给myTask变量赋值,来给下面的代码使用,结果发现后端可以传回来数据,ajax中的myTask也赋上了值,但是外面这个myTask变量却没有赋上值。
在大佬的帮助下明白了,ajax一般是默认异步处理。在执行ajax时,由于默认是异步请求,ajax还没执行完,还没有给上面的myTask变量赋上值,下面的代码已经开始用这个空的myTask变量,继续执行下面的代码了,所以我们要想给上面的变量赋值,那么我们要给ajax改成同步处理。
jquery 中async属性:默认是true,也就是异步请求 false是同步请求。完成之后代码正常运行。
什么是异步处理?
异步和我们生活中的异步不一样,异步和生活中的同步类似。
生活中,比如有两个人,在同一时间,一个人在看书,一个人在踢球,互相不干扰。
在代码中,我用ajax向服务器发送请求,此时不管服务器有没有给ajax响应,后面的的代码也能进行。
那什么是同步处理?
同步就像排队一样,必须等你完成了,我才能进行。比如我们去火车站买票,我们需要排队,我们要想买到票,必须等前面的人都买好,我们才能买。
同步处理在ajax中就是ajax向服务器发送请求,如果后面的代码想要执行,那么必须等待ajax执行完毕才能继续执行。