ajax请求的同步异步问题
前言
在做项目的过程中遇到一个bug就是:使用了alert语句后,代码才能正确执行,没使用就执行不成功。
后来我就用把console.log,代码就不能正确执行。
于是我就去比较了下consol.log和alert有什么不同
console.log与alert的不同
[1]alert()
[1.1]有阻塞作用,不点击确定,后续代码无法继续执行
[1.2]alert()只能输出string,如果alert输出的是对象会自动调用toString()方法
e.g. alert([1,2,3]);//'1,2,3'
[1.3]alert不支持多个参数的写法,只能输出第一个值
e.g. alert(1,2,3);//1
[2]console.log()
[2.1]在打印台输出
[2.2]可以打印任何类型的数据
e.g. console.log([1,2,3]);//[1,2,3]
[2.3]支持多个参数的写法
e.g. console.log(1,2,3)// 1 2 3
思考
看到了其中一个很重要的一点就是alert有阻塞作用,不点击确定,后续代码无法继续执行.
于是我就思考为什么我的代码需要阻塞才能正确执行呢,莫非是加载的问题?因为项目是ajax请求后才能加载完全。
于是我就去看了下,并且把ajax请求中的async属性设置为了false(同步),这样只有等到我ajax请求后才能继续执行下面的代码,而不是异步加载。
总之异步加载也是有一定的代价的,如果你后面还要使用ajax异步加载后的结果就不推荐使用异步,应该使用同步。
好了以后使用ajax时,一定要注意同步异步的问题啦~~~