Ajax 同步和异步请求数据结果的差异性

    技术2026-01-06  7

    每次在使用Ajax请求数据的时候都能碰到一些奇怪的现象,也正因为每次都是模糊的混过去所以也就一次又一次的遇到同样的问题,今天终于定下来好好研究一下这个奇怪的的东西

    在用ajax请求数据的时候以前没考虑过会什么时候用同步,什么时候要用异步,只知道它能在不刷新页面的情况下能带回我 想要的信息

    讨论:

    问题程序

    var _bool = false; createXHR(); //创建xmlHttpRequest对象 xmlHttp.onreadystatechange = callback; xmlHttp.open('POST','test.php',true); xmlHttp.setRequestHeader("If-Modified-Since","0") xmlHttp.send(); alert(_bool); function callback() { if(xmlHttp.readyState == 4) { if(xmlHttp.status == 200) { _bool = xmlHttp.responseText; } } }

    问题就是这样来的,无论callback返回的是什么 alert出来的结果永远都是false,真让人郁闷啊,即使将open方法异步(true)改为同步(false),问题一样存在

    几经波折终于找到问题了

    1.xmlHttp.open('POST','test.php',true)指明使用异步请求,如果使用同步 则xmlHttp.onreadystatechange 将不起作用了,固访问不到callback函数里面

    2.如要同步请求则应该这样做

            createXHR();         xmlHttp.onreadystatechange = callback2;         xmlHttp.open('POST','test.php',true);         xmlHttp.setRequestHeader("If-Modified-Since","0")         xmlHttp.send();                callback();

     

       function callback() {             _bool = xmlHttp.responseText;           alert(_bool+xmlHttp.readyState);          }

    这样程序将顺序执行最终得到_bool想要的值

    3.无法将ajax异步得到值赋给全局变量,浏览器不会等到请求结束后在去执行其他程序,如果在callback函数里有类似alert之类的断点操作还是可以改变_bool的值的

     

    至此这个小问题已解决了,网上有一些这方面的解答,但不知是我功力不够还是怎么的无法直接了解到其中的意思,故用自己的想法记录一次

     

     

    最新回复(0)