本文主在宏观的介绍下AJAX,首先很明确AJAX并不是一门新的语言,而是对先有技术的综合利用。
AJAX即Asynchronous JavaScript And XML的首字母缩写Asynchronous翻译过来就是异步的。很多初学者在看到异步这个词,脑袋都会大了。这里我们举一个浅显又不失内涵的栗子。
对象,大家都有吧,没有那就完了,不了解对象还怎么编写javascript代码,要知道js中万事万物皆对象这句话正确90%(除了值类型)。为了理解异步,我们需要先理解什么事同步。同步就是比如我想看书,但是必须去学校去一个文件,但是去学校的路况极差(我知道有些大伙会想着边坐车边看书,所以我这里强调了,坐车只能坐车,路况差到除了坐车你什么都不能干,太颠簸了),我只能先坐车去学校,然后找人拿到文件,再坐车回家,回家后才能开始看书。从上面这个例子我们就能总结出,同步就是一件事一件事的去做,再做一件事的时候不能做另外一件是(比如坐车的时候不能玩手机,不能看书等等)。下来就是异步了,异步例子就比如这样,我还是想看书,但当我出门的时候,我对象回来了,我对象对我很好,觉得路途太辛苦了,还没办法看书,就决定她帮我去取材料,我在房子看书。我同意了,所以我对象带着"任务"就去学校取材料而我继续在看书了,最终我的对象圆满完成"任务"我问她要了我需要的那个材料。(怎么说呢,上文的最后一句话感觉上像是个废话,但是在AJAX中确实最最核心的一步)。
最后,特此感谢我对象在这次事件中对我的支持。
根据上面这个栗子,在这一整个事件中,我对象扮演的角色就是一个异步对象,在AJAX中异步行为并不是由自身来完成的,而是由一个异步对象来完成的,所以我们可以记住,但凡有异步行为,必有异步对象。(强调一下,如果在第一个栗子中,我坐车去学校,但是路况很好,我可以在车上看书,在这种情况下,我们的行为可以称之为可以称之为异步行为,但是这是生活中的异步,不是AJAX中的异步,因为没有异步对象的存在)。
AJAX请求的核心就是那个异步对象,那个异步对象可以帮我们完成很多事情,我们需要的数据也是问异步对象去要。
题外话:js是单线程语言,所以这也是js相对于多线程语言的优点之一就是执行效率很高,因为多线程的语言一直是以消耗内存为代价,对内存的使用率一直不高。这里我想要引出非阻塞与阻塞这两个概念,简单的说就是,如果我想看书,我对象偏要我陪她逛街,我不去她就生气,最后我不得不去,那么她就算是阻塞了我的看书行为。再比如,我对象要逛街了,但是她觉得我眼光很差不愿意让我跟她一起逛街,最后她给我说了一声就蹦跶蹦跶的自己去逛街了,并没有影响我的看书行为,这就是非阻塞。总结来说就是,一个事件的发生会不会影响后续事件的执行?如果影响就是阻塞,如果不影响就是非阻塞。
回到正题,AJAX是在HTTP协议的基础上以异步的方式与服务器进行通讯。通讯就是指,我该怎么样向服务器要数据,服务器怎样想我们提供数据。
异步与同步也不是新的技术,异步与同步只是一个程序执行的一种方式而已。
打电话时同步的执行方式,因为我在与我对象进行通话的时候,阻塞了项目经理给我打电话(手动滑稽)。而发微信是异步的执行方式,因为你可以一次跟多个人聊微信。