首页 > 代码库 > [ajax 学习笔记] ajax 的服务器响应
[ajax 学习笔记] ajax 的服务器响应
在上一篇[ajax 学习笔记] ajax初试中,简单了解了一下ajax。
我是参考AJAX详解.chm学习的,资源已上传。参考链接:Ajax 专题
今天又学习了ajax中关于服务器响应的一些知识。
ajax中服务器的响应是通过响应函数将服务器返回的数据呈现到页面的。服务器的响应体现在服务器响应回调函数中。
在上一篇的例子中,响应函数为:
function updatePage(){ if(xmlHttp.readyState == 4){ //http就绪状态 if(xmlHttp.status == 200){ //判断http状态代码 var response = xmlHttp.responseText; document.getElementById("ajax-result").value = http://www.mamicode.com/response;>关于这个响应函数要说明以下几点:
1.xmlHttp.readyState
这个例子中xmlHttp是XMLHttpRequest对象的一个实例。该对象有一个readyState属性,表示就绪状态。
就绪状态有五种,分别为:
> 0:请求未初始化(还没有调用open())
> 1:请求已经建立,但是还没有发送(还没有调用send())
> 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)
> 3:请求正在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成相应的生成
> 4:响应已完成;表示可以获取并使用服务器的响应了
由这几种状态可以知道,当XMLHttpRequest对象的readyState对象为4时,表示服务器已经完成了对请求的响应,用户才可以对服务器响应的数据进行操作,于是回调函数中会出现判断xmlHttp为4的代码。
试一试:如果你在回应函数中这么写:
function updatePage(){ alert("readyState=" + xmlHttp.readyState); }你会发现浏览器会弹出2~4次警告,告诉你当前的就绪状态。这是因为每次继续状态改变的时候都会调用该回调函数。2.xmlHttp.status
XMLHttpRequest有一个status属性用来表示HTTP的状态码。(您访问网页的时候一定遇到过"404 not found"字样的情况吧,这里的状态码就是404这样的数字,用来表示服务器HTTP响应状态,404呢表示请求失败,200表示请求成功,如果查看状态码,你可以用web开发者工具看一下Network一栏)
有兴趣的可以多了解一下HTTP状态码的信息。
在回调函数中对HTTP状态码详加判断能够增加程序的健壮性,同时使能够帮助用户加速找到程序发生的问题。
3.ajax和XML
在上面回调函数例子中用到了XMLHttpRequest的responseText属性,它表示服务器响应返回的文本信息。
这里可能有一个认识的误区:从名字上看,XMLHttpRequest的数据传送应该是XML格式的。其实不然。ajax的数据传送可以是文本的(像上面例子中用get方式进行名/值传送),也可以传送XML文档(用到XMLHttpRequest的responsXML属性)。
就web应用程序客户端而言,用文本传送和XML传送数据内容都是相同的,在内容相同的基础上,XML要比普通文本浪费了空间,在传送时浪费了时间,所以对于客户端来说,大多数情况下,用普通文本传送数据更好。
为什么说使用XML增加了处理时间?
用XML传送数据时:将文本包装成 XML;发送额外信息(要注意我没有包含任何包围元素、XML 头或者可能出现在实际请求中的其他任何内容);让服务器解析 XML、生成响应、用 XML 包装响应,并将它发送回网页;让网页解析响应,最后使用它。
但是有些情况下还是要用XML的。比如用get方式传送名/值对时,假如数据量很大,get传送方式有一定的长度限制,这是可以考虑用XML来传送。
就web应用程序服务器端而言,向服务器端发送XML情况大致分为两类:
1> 服务器仅接受XML请求
2> 您正在调用一个仅接受XML或SOAP请求的远程API。(可以看成是上一种情况的特例)
如果要发送XML数据,需要两个步骤来保证XML的数据能够被正确接收:
1> 保证向其发送 XML 的脚本能够接受 XML 数据格式。
2> 保证脚本认可发送数据所采用的特定XML格式和结构。