Ajax在网页中最大的一个优点是它可以访问服务器上的信息而不需要重新加载网页。这意味着要检索或是更新信息的某一小个部分的时候,只需要从服务器端传送那一部分需要的信息而不需要重新下载整个网页。
Ajax可以通过两种方法访问服务器,即同步(脚本会停留并等待服务器发送回复然后再继续)和异步(脚本允许页面继续其进程并处理可能的回复)。
即使是同步处理你的请求有一点像重新加载页面但是只需要下载要求的信息而不是整个页面。因此这一方法会比不使用Ajax要快一些因为信息的下载量要小,所以检索的速度就快了。但是要使用这个方法需要你的访客等待下载请求的出现。虽然你的访客已经习惯了等待下载整个页面,但是他们还不习惯在与网页互动的时候进行等待,因此除非你要求的信息是小到可以迅速下载完的,否则用户是不会耐心去等待的。
异步处理避免了服务器检索时候的延时问题,因为你的访客可以继续在页面进行操作,而要求的信息也可以在更新页面的同时得到处理。对于较大的请求来说,所需的响应时间较长,但是如果使用异步处理,那么访客不会特别意识到延时所带来的麻烦,因为他们的注意力仍然放在对页面的操作上。而对于那些瞬时的响应,你的访客甚至根本不会意识到服务器发出了这样的请求。
因此使用异步调用是Ajax中比较受青睐的方法,这种方法可以为访客的访问提供更便捷的服务,使得他们更愉悦,也避免了Ajax干扰其他页面的操作。
如果异步调用对于访客来说是可以提供比同步调用更方便的访问的话,那么为什么Ajax还要为我们提供同步调用呢?虽然异步调用的使用率几乎是百分之百,但是总是有一些例外情况的。在极少见的情况下,让你的访客在某一特定服务器端的处理过程结束前,让你的访客继续操作页面是没有什么意义的。如果是碰到这样的情况,或许根本不要使用Ajax而只是重新载入整个页面。Ajax中的同步选择是为极少数既不能使用异步调用也不能重新载入整个页面的情况而准备的。虽然这样的情况不多,但是它们确确实实存在,因此为以防万一Ajax需要准备同步调用。
对于很多初学者来说,容易掉入使用同步调用的误区,即便是在更适合使用异步调用的时候,他们还是一如既往地选择同步调用。造成这一情况的原因主要是因为同步调用更容易让人理解整个进程是怎样运行的。事实上,除了不需要等待响应以外,异步调用的工作原理和同步调用大同小异。
两者唯一的区别是在使用异步调用的时候,我们可以设置多个Ajax调用,这个调用是重叠的,即在前一个还没有响应的时候就可以发出第二个调用。这就异步调用比同步调用看上去要复杂一些的原因,因为你需要确定每个Ajax请求使用的都是单独的Ajax对象而不是所有的Ajaz请求都重复使用相同的对象。如果多个异步调用使用的是同一个对象那么响应处理器只会处理收到的第一个响应,而且会忽视其他后续响应。使用带有相同对象的重叠的Ajax调用,我们没有一个确凿的方法可以分辨出究竟哪个响应被处理了,也不知道该响应是否与发出的请求顺序一致。而为每个Ajax调用使用单独的对象,我们就可以获得相应的响应,响应处理器也能够准确对它们进行分辨。
异步使用Ajax对于大多数情况来说都是更好的选择。如果你只需从页面发出一个Ajax调用,那么,除了那个指定要怎样处理调用的参数以外,其编码方式和同步调用没有什么不同。在相同页面使用多个Ajax调用,唯一的复杂的地方是你需要为每个请求创建一个单独的Ajax对象。各种类型的Ajax库可以为你做好这样,唯一需要你编写异步调用代码的情况是你需要与同步调用不同的操作。