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。

以上是我在往上查到的资料,对于同步异步的概念还是不甚理解,最后一段什么意思,还请各位赐教
评论
hzl091 2008-04-29
同步是说代码的上一个功能执行完之后才执行下面的代码,而异步则不需要
s79 2008-04-29
不是说建立一个XHR对象,发送请求后立刻就获得返回值,要给他时间,到时候让他自己调用回调函数。这个XHR等待回应的时候我们还可以干别的。这就是异步。

onreadystatechange函数检查到if(xmlhttp.readyState == 4)就执行回调函数即可。
也可设置一个timeout,超过这个时间就取消本次请求并给出相应通知。

这段代码的结构是错误的。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

xujingbao
搜索本博客
博客分类
我的相册
3ffedd3b-abb1-3078-835c-d0a7b71e2fa3-thumb
1215177
共 3 张
最新评论