关于ajax超级基础的问题

来源:百度知道 编辑:UC知道 时间:2024/05/02 11:02:06
我在学习ajax中 看到了例子
我就一点没弄明白 (我是学java的)
代码如下
////////////////////////////////
<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: " + xmlHtt

Question1:handleStateChange这个是回调函数,因为ajax是异步的方式,那么这种非阻塞的运行机制必然要求有一个回调函数提供给服务端来调用,也就是说,你通过url发送请求到服务端之后,服务端再处理完数据后,会调用你提供给它的回调函数,将数据返回给你,所以,这个方法不是给你来调用的,是给服务端调用的
Q2:为什么写handleStateChange而不是handleStateChange()呢,这个是个简单的尝试,我们需要的只是申明函数的入口,而不是调用该函数,简单理解,handleStateChange就是指handleStateChange()这个函数的地址
Q3:见Q1,既然是回调函数,服务端已经完成工作,剩下的就是你函数自己的事情了,自然不需要什么return了,你只需要在handleStateChange这个函数中接收服务端传回的数据做自己的业务处理就可以了,到这步,你已经完成了与服务端的通讯了,无需return

xmlHttp.onreadystatechange指定当readyState属性改变时的事件处理句柄

readyState属性:
0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化) 对象已建立,尚未调用send方法
2 (发送数据) send方法已调用,但是当前的状态及http头未知
3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

js调用一个方法可以不写()

这个readyState属性是xmlHttp对象内置属性的,当属性改变时执行后面那个函数

相当于
xx.onClick = handleStateChange();
括号可以省略

Q1,这句话的意思是onreadystatechange的时候,调用handleStateChange这个方法,你发送一个请求之后,用这句话来绑