浏览 318 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-23
var returnValue = null;
xmlhttp = createXmlHttp();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
if (xmlhttp.responseText == "true") {
returnValue = "true";
}
else {
returnValue = "false";
}
}
};
xmlhttp.open("Post",url,true); //异步传输
xmlhttp.setRequestHeader("If-Modified-Since","0"); //不缓存Ajax
xmlhttp.send(sendStr);
return returnValue;
如果是同步(false),返回值是true或false,因为执行完send后,开始执行onreadystatechange,程序会等到 onreadystatechange都执行完,取得responseText后才会继续执行下一条语句,所以returnValue一定有值。 如果是异步(true),返回值一定是null,因为程序执行完send后不等xmlhttp的响应,而继续执行下一条语句,所以returnValue还没有来的及变化就已经返回null了。 所有如果想获得xmlhttp返回值必须用同步,异步无法得到返回值。 同步异步使用xmlhttp池时都要注意:取得xmlhttp时只能新建xmlhttp,不能从池中取出已用过的xmlhttp,因为被使用过的xmlhttp的readyState为4,所以同步异步都会send但不执行onreadystatechange。 以上是我在往上查到的资料,对于同步异步的概念还是不甚理解,最后一段什么意思,还请各位赐教 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间:2008-04-29
不是说建立一个XHR对象,发送请求后立刻就获得返回值,要给他时间,到时候让他自己调用回调函数。这个XHR等待回应的时候我们还可以干别的。这就是异步。
onreadystatechange函数检查到if(xmlhttp.readyState == 4)就执行回调函数即可。 也可设置一个timeout,超过这个时间就取消本次请求并给出相应通知。 这段代码的结构是错误的。 |
|
| 返回顶楼 | |
|
时间:2008-04-29
同步是说代码的上一个功能执行完之后才执行下面的代码,而异步则不需要
|
|
| 返回顶楼 | |



