学习AJAX
其实对ajax的学习从上个星期就开始了,主要是上个星期我所在的一个IT夏令营教授Javascript,所以我边学基本语法边学ajax的部分,过程我发现其实js的语法规则和c++很像,所以我只用了一个多小时就把js的基本语法熟悉了,然后就是对ajax的学习了,那么就开始ajax的学习。
Http协议规定了对服务器如何发起请求和如何响应并处理请求。通常Http并不在脚本的控制下。只有当用户单击链接、提交表单和输入url是发生,但js可以操纵Http。当脚本设置了window对象的location属性或调用表单对象的submit()方法时,都会初始化Http请求,简单的说就是刷新了页面或加载了新页面。Ajax应用的主要特点是使用ajax技术把用户的交互数据记录记录到服务器中,也可以开始只显示简单页面,之后按需要脚在额外的数据和页面组建来提升应用的启动时间。(这里大家要注意一个地方,就是脚本调用表单对象的submit()方法。我之前在编写一个用于实验的ajax例子时就在这里出现过问题。对于用form表单提交数据时,如果要用到ajax数据,那么一定不要用<input type="submit" ......>这个标签,因为这样就会用到submit()方法,所以当用户点击这个按钮时页面就会刷新,最后你就不不会看到你想看到的效果了。)
AJAX = 异步 JavaScript 和 XML,XMLHttpRequest 是 AJAX 的基础,所以在用到ajax时离不开XMLHttpRequest()对象。对于不同的浏览器,在创建XMLHttpRequerst()对象的时候是有不同的,因为不同的浏览器不一定支持同一种XMLHttpRequerst对象,(额,当然用JQuery时可以避免这样的问题,不会像js一样在创建XMLHttpRequerst对象时先要经过各种尝试再才能创建XMLHttpRequerst对象。其实对于现在大多数的浏览器都是支持XMLHttpRequerst对象的,特例就是微软的ie5和ie6,也就不吐槽在编写兼容这两个浏览器时html文本的复杂程度了。
这段代码就是我编写的一个练手的js代码,10-17行就是用来创建XMLHttpRequerst对象,ActiveXObject()就是用来创建兼容ie5、ie6的XMLHttpRequerst对象,这里要注意ActiveXObject的仓鼠是一个字符串。(而对于ActiveXObject的东西http://bbs.csdn.net/topics/290067208,这个链接也许可以向你说清楚。)然后就是对于XMLHttpRequerst对象的几个方法的说明了。上边的代码中第十八行,就是获取form表单中的文本输入栏中的内容,这个我之前不知道所以就用了submit()方法来获取表单的内容,也就是因为这个我发现页面总是刷新而且得不到我想要的效果,后台才发现了这个问题,之后我将submit()换成了一个button,再通过18行的那一句代码,就可以获取我想要的表单数据了(这也反映出其实我学习js程度太浅,只是知其皮毛而已。。。。。。。)。再就是XMLHttpRequerst对象的几个方法,首先是open(),open()的参数有三个,第一个参数用来声明向服务器发起请求的方式,,第二个是告诉服务器请求文件的地址,第三个是用来说明是同步传输还是异步传输。对于get方法比较简单,而且不需要在http报文中写入数据,所以后面的sent()方法的参数可以省略,而对于post方法,要向请求http报文中写入数据,所以sent()方法的参数就要写了。这里也就顺便把sent()方法说了,sent()方法用来发起一次请求,他有一个可选参数,get方法时不用写,post方法是要写入要通过post方法传递什么要的信息。通常是以名值对的形式出现。还有就是在以post方法请求时第20行的代码必须写,要保证可以修改http报文。再就是onreadystate(),当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。而readyState有5个状态值,分别是0、1、2、3、4,他们分别代表请求为初始化、服务器连接建立、请求接收、请求已处理、请求已结束且响应已就绪,注意在时间的验证过程中可能在审查元素中发现readyState值一直都不是4,或者总停在某一个状态值上,只可能是由于网速的问题,我之前就一直出现这样的问题,这时你不妨试试,把open()方法的第三个参数改成True,就是改成同步,这样也许就可以解决了,因为我就是这样解决的。XMLHttpRequerst的两个属性readyState和status,readyState已经介绍过了,status就是用来表明请求的状态值,和普通网页http请求的状态值一样,可能有200、404、502等等状态。额,这些就是对ajax的一个初步的了解,这些也是js中应用ajax的一些总结,当然如果你用jQuery应用ajax是你会发现,会简单的多,语句更少更简单却可以实现和js一样的功能,大家有兴趣的可以去w3cschool学习一下,难度并不是很大。还有就是在用js应用ajax时,大家一定要对js有一定程度的了解,否则会有很多地方不明白。
嗯,以上就是我学习的大概过程和体会了,如果大家对ajax很有兴趣的话我向大家推荐一本书《Ajax Hacks》这本书从底层讲起,介绍ajax的各种原理和内容,不过相当贵,网上也没有电子档。。。。所以大家有兴趣可以买一本来看看,一定会有很大的收获。