第一个Ajax程序给我的下马威——xmlHttp的status=0?
keyword:ajax调试,javascript调试,status=0,XMLHttpRequest的Status,Stauts属性,XMLHttpRequest的StatusText,StautsText属性
这几天在看《Ajax基础教程》,感觉这本数的第2,3章真的很不错,特别是对XMLHttpRequest对象的讲解,以及第三章与服务器的交互讲的很不错。简单易懂而且能解决你很多的以前的说不出区别的一些概念。
虽然Ajax这个东西,看过了不少它的资料,而且现在的确对它已经有了一个比较整体的了解(说时候这个东西真是是一个新东西,感觉只是大家突然发现一个东西可以解决b/s模式页面刷新问题,所以大家终于抓住了一个救命的稻草,开始火热的研究或者说吹捧起来。而那根稻草就是XMLHttpRequest+Dom+XML)。就像《Ajax基础教程》中说到的,Ajax并不是一个新的技术,与其说是技术,不如说是一个技巧更合适。
有了一些理论知识,当然要用实践来证明以下了,所以今天可以写一个简单的代码,一直对自己的手写代码不太信任,所以一开始选了一个超级简单的一段代码。没有想到就是这段helloword级的代码,竟然让我郁闷了小半天……
代码很简单,就是通告XMLHttpRequest把一个XML文件里面的东西读出来,然后alert一下。
代码如下:
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>my First ajax</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
function startRequest(){
createXMLHttpRequest();
xmlHttp.onreadystatechange=handleStateChange;
xmlHttp.open("GET","simpleResponse.xml",true);
xmlHttp.send(null);
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
alert(xmlHttp.statusText);
if(xmlHttp.status == 200) {
alert(xmlHttp.responseText);
}
}
}
</script>
</head>
<body>
<form action="#">
<input type="button" value="test" onclick="startRequest();">
</form>
</body>
</html>
simpleResponse.xml文件里面是随便写的一些东西。运行了一下,发现无论如何alert不出来东西。用vs2005调试了一下才发现问题出在xmlHttp.status上(惭愧~今天才刚搞懂怎么用vs2005调试javascript,还满高兴的,等下写篇东西讲讲过程)。原来status一直等于0!查了一下资料发现200对应ok,404代表Not Found,并没有提到0是什么东西,郁闷了几分钟,突然想起来statusText这个XMLHttpRequest属性,于是alert一下这个(刚学会vs2005的调试,所以还保留了以前的笨方法,慢慢适应吧),发现竟然是“unknow”。看到这个词才恍然,难道一定要先在IIS里面建立一个站点?inetmgr一下,竟然发现IIS没有安装(前一段时间重新安装系统的时候忘了安装了-_-b...),重新安装,然后将2个文件拷贝到一个文件夹中,将文件夹web共享一下。在IIS中浏览,果然alert出了正常的数据。
汗一个~好像犯了一个很低级的错误。正是这个低级的错误,让我吃到了helloAjax中的第一个下马威。