<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) {
if(xmlHttp.status == 200) {
alert("The server replied with: " + xmlHttp.responseText);
}
}
}
</script>
//////////////////////////////////
我的问题是:
xmlHttp.onreadystatechange = handleStateChange;这句话中
是不是表示 调用handleStateChange方法 来返回一个状态给xmlHttp.onreadystatechange
我觉得是这样的 没错吧?
有了状态以后就能执行下面的open() send()吗?

还有 最不明白的就是 既然是执行handleStateChange方法
为什么
不写handleStateChange();要写handleStateChange;

还有第三个问题
既然 要返回给xmlHttp.onreadystatechange

为什么 handleStateChange()方法里没有return? 那他知道返回什么吗?

答案:

Question1:handleStateChange这个是回调函数,因为ajax是异步的方式,那么这种非阻塞的运行机制必然要求有一个回调函数提 供给服务端来调用,也就是说,你通过url发送请求到服务端之后,服务端再处理完数据后,会调用你提供给它的回调函数,将数据返回给你,所以,这个方法不 是给你来调用的,是给服务端调用的

Q2:为什么写handleStateChange而不是handleStateChange()呢,这个是个简单的尝试,我们需要的只是申明 函数的入口,而不是调用该函数,简单理解,handleStateChange就是指handleStateChange()这个函数的地址
Q3:见Q1,既然是回调函数,服务端已经完成工作,剩下的就是你函数自己的事情了,自然不需要什么return了,你只需要在 handleStateChange这个函数中接收服务端传回的数据做自己的业务处理就可以了,到这步,你已经完成了与服务端的通讯了,无需return

 


 

 

posted on 2008-12-31 11:24  风的继承者  阅读(223)  评论(0编辑  收藏  举报