别说爱就一个字,你数数你说过几次;
别说程序员好干,你看看你年薪几万!~
别说你爱的太真,伤的却太深——只要真心的投入就无悔、无怨恨
别说失去的太多,那是不懂得收获;别说爱了又错过,那是你没有去收获住那么硕果!~
请真心你现在所拥有的一切——守侯住属于你的爱情!FOR ever
详解Ajax中XMLHttp请求及利弊分析
上一篇 / 下一篇 2008-02-10 23:05:22 / 个人分类:报子箱!~
查看( 45 ) /
评论( 7 )
请注意此处的第一个参数,也就是请求类型,即使在技术层面要求请求类型全部为大写字符,但此处使用小写也是没关系的。 接下来,你需要定义一个onreadystatechange事件处理函数,XMLHttp对象有一个名为readyState的属性,当发送请求或收到响应时,此属性值会改变。IXPUB技术博客;S m0W7oS x4C$p?6Y9F
以下是属性readyState可取的五个值:
E-bUyV4N00(未初始化):对象已创建,但还未调用open()方法。IXPUB技术博客r)v'FE[m-~)I
1(正在加载):已调用open()方法,但请求还未发送。
(x0`-A:v{X02(已加载):请求已经发送。
:mmc(y3B+d$}%@r2[03(相交互):已接收到一部分响应。IXPUB技术博客 \`2d1_h#aI;h-]4BqJ
4(完成):所有数据已收到,连接已经关闭。
)d{,k'[4B*E L0在每次readystate属性值变化时,都会引发readystatechange事件,并调用onreadystatechange事件处理函数。因为各浏览器实现之间的差异,在跨浏览器开发时唯一可靠的readystate值为0、1和4。在大多数情况下,当请求被返回时,只需检查此值是否为4:
#b4Y(}G Sm z0IXPUB技术博客_d4@8}YFf
IXPUB技术博客'lmNtT{
IXPUB技术博客dG_IL2_)b
var XmlHttp = zXmlHttp.createRequest();oXmlHttp.open("get", "info.txt", true);oXmlHttp.onreadystatechange = function () { if (oXmlHttp.readyState == 4) { alert("得到响应!"); }};IXPUB技术博客 UYb&qA$Xf&yT
最后一步是调用send()方法,实际上是由它来发送请求的。这个方法只接受单一的参数——一个代表请求体的字符串。如果请求不需要一个请求体(比如说:GET请求就不需要),就必须传递给它一个null值:
vPX@|@0IXPUB技术博客[$e9\*hf9E f
Vz _w;j[,o'h(c:v0var XmlHttp = zXmlHttp.createRequest(); oXmlHttp.open("get", "info.txt", true); oXmlHttp.onreadystatechange = function () { if (oXmlHttp.readyState == 4) { alert("得到响应!"); } }; oXmlHttp.send(null);IXPUB技术博客)~6Mi(bTRm^ P4`
IXPUB技术博客iQl4q$[&Ni1e
大体流程是,发送请求后,当收到响应,将会显示一个提示框,但仅仅显示一条请求已被接收的消息是远远不够的,XMLHttp的真正威力在于,不但可以让你访问到返回的数据,还可以访问到响应状态和响应头部信息。IXPUB技术博客T%`.|SE'}2b9]Vp
?C Gx%}\1SK*X0为得到从请求返回的数据,可使用responseText和responseXML属性;属性responseText返回一个包含请求体的字符串,而responseXML则是一个XML文档对象,只用于返回数据中包含有text/xml内容的情况。因此,为取得info.txt中的文本,必须进行以下调用:IXPUB技术博客,`g?^1i~ \1YRW
M1ZkMlB2n1ph0var sData = oXmlHttp.responseText;
%IUp0z"[E C:SGI@1R0注意,只有文件存在,并且没有错误发生时,才会返回info.txt中相应的文本。但如果info.txt文件不存在,则responseText将返回一个服务器404错误信息,幸好,还有一个方法可以确定是否有错误发生。IXPUB技术博客4ex R*r;kW|0b~
属性status中包含有响应返回的HTTP状态代码,而statusText是关于状态的文本描述(如:OK或者Not Found)。使用这两个属性,你可以确认所接收到的数据是实际想要的数据,或告诉用户为什么数据没有收到:
8r8XU(LEkn0IXPUB技术博客+bk7YI)n(A{!f
if (oXmlHttp.status == 200) { alert("返回的数据为:" + oXmlHttp.responseText; } else { alert("错误为:" + oXmlHttp.statusText; }
O T/L,OB c/H4xlz2KYe0通常来说,必须保证响应的status(状态码)为200IXPUB技术博客"F&V}IK@NM#`
IXPUB技术博客7z5fG)`x
,以表明请求完全成功,有时即使服务端有错误发生,属性readState仍会被设为4,所以仅仅检查此值还是不够的。在这个例子中,如果status值为200,将显示responseText的内容,否则,就显示一个出错信息。
C)?e^/X Rb!I0在Opera中,仍未实现statusText属性,在其他的浏览器上,有时还会返回一个不精确的描述信息,所以,不能仅仅依靠statusText来判断是否有错误发生。 正如前面所提到的,我们还可以访问到响应头部信息,在此使用getResponseHeader()方法,并传递给它一个你想要的头部名,来得到一个特定的头部值。而当中最有用的一个响应头部信息是Content-Type,它将告诉你正在被发送的数据类型:IXPUB技术博客!Q8h-d x.Zk^
以下是属性readyState可取的五个值:
E-bUyV4N00(未初始化):对象已创建,但还未调用open()方法。IXPUB技术博客r)v'FE[m-~)I
1(正在加载):已调用open()方法,但请求还未发送。
(x0`-A:v{X02(已加载):请求已经发送。
:mmc(y3B+d$}%@r2[03(相交互):已接收到一部分响应。IXPUB技术博客 \`2d1_h#aI;h-]4BqJ
4(完成):所有数据已收到,连接已经关闭。
)d{,k'[4B*E L0在每次readystate属性值变化时,都会引发readystatechange事件,并调用onreadystatechange事件处理函数。因为各浏览器实现之间的差异,在跨浏览器开发时唯一可靠的readystate值为0、1和4。在大多数情况下,当请求被返回时,只需检查此值是否为4:
#b4Y(}G Sm z0IXPUB技术博客_d4@8}YFf
IXPUB技术博客'lmNtT{
IXPUB技术博客dG_IL2_)b
var XmlHttp = zXmlHttp.createRequest();oXmlHttp.open("get", "info.txt", true);oXmlHttp.onreadystatechange = function () { if (oXmlHttp.readyState == 4) { alert("得到响应!"); }};IXPUB技术博客 UYb&qA$Xf&yT
最后一步是调用send()方法,实际上是由它来发送请求的。这个方法只接受单一的参数——一个代表请求体的字符串。如果请求不需要一个请求体(比如说:GET请求就不需要),就必须传递给它一个null值:
vPX@|@0IXPUB技术博客[$e9\*hf9E f
Vz _w;j[,o'h(c:v0var XmlHttp = zXmlHttp.createRequest(); oXmlHttp.open("get", "info.txt", true); oXmlHttp.onreadystatechange = function () { if (oXmlHttp.readyState == 4) { alert("得到响应!"); } }; oXmlHttp.send(null);IXPUB技术博客)~6Mi(bTRm^ P4`
IXPUB技术博客iQl4q$[&Ni1e
大体流程是,发送请求后,当收到响应,将会显示一个提示框,但仅仅显示一条请求已被接收的消息是远远不够的,XMLHttp的真正威力在于,不但可以让你访问到返回的数据,还可以访问到响应状态和响应头部信息。IXPUB技术博客T%`.|SE'}2b9]Vp
?C Gx%}\1SK*X0为得到从请求返回的数据,可使用responseText和responseXML属性;属性responseText返回一个包含请求体的字符串,而responseXML则是一个XML文档对象,只用于返回数据中包含有text/xml内容的情况。因此,为取得info.txt中的文本,必须进行以下调用:IXPUB技术博客,`g?^1i~ \1YRW
M1ZkMlB2n1ph0var sData = oXmlHttp.responseText;
%IUp0z"[E C:SGI@1R0注意,只有文件存在,并且没有错误发生时,才会返回info.txt中相应的文本。但如果info.txt文件不存在,则responseText将返回一个服务器404错误信息,幸好,还有一个方法可以确定是否有错误发生。IXPUB技术博客4ex R*r;kW|0b~
属性status中包含有响应返回的HTTP状态代码,而statusText是关于状态的文本描述(如:OK或者Not Found)。使用这两个属性,你可以确认所接收到的数据是实际想要的数据,或告诉用户为什么数据没有收到:
8r8XU(LEkn0IXPUB技术博客+bk7YI)n(A{!f
if (oXmlHttp.status == 200) { alert("返回的数据为:" + oXmlHttp.responseText; } else { alert("错误为:" + oXmlHttp.statusText; }
O T/L,OB c/H4xlz2KYe0通常来说,必须保证响应的status(状态码)为200IXPUB技术博客"F&V}IK@NM#`
IXPUB技术博客7z5fG)`x
,以表明请求完全成功,有时即使服务端有错误发生,属性readState仍会被设为4,所以仅仅检查此值还是不够的。在这个例子中,如果status值为200,将显示responseText的内容,否则,就显示一个出错信息。
C)?e^/X Rb!I0在Opera中,仍未实现statusText属性,在其他的浏览器上,有时还会返回一个不精确的描述信息,所以,不能仅仅依靠statusText来判断是否有错误发生。 正如前面所提到的,我们还可以访问到响应头部信息,在此使用getResponseHeader()方法,并传递给它一个你想要的头部名,来得到一个特定的头部值。而当中最有用的一个响应头部信息是Content-Type,它将告诉你正在被发送的数据类型:IXPUB技术博客!Q8h-d x.Zk^