论坛首页 AJAX版 AJAX

Ajax,xmlhttp同步与异步的区别

浏览 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。

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

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

这段代码的结构是错误的。
   
0 请登录后投票
时间:2008-04-29
同步是说代码的上一个功能执行完之后才执行下面的代码,而异步则不需要
   
0 请登录后投票
论坛首页 AJAX版 AJAX

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)