<input id="B1" type="button" value="开始获取" onclick="hq()">
<SCRIPT language=javascript type=text/javascript>
function hq(){
 document.getElementById("B1").disabled =true;
 document.getElementById("B1").value ="获取中.." var url="http://123.com/123/123.htm";
 var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");           
 xmlHttp.open("GET", url, false);    
 xmlHttp.send(null); 
 var ajx1=xmlHttp.responseText; document.getElementById("B1").disabled =true;
 document.getElementById("B1").value ="获取结束"

</script>我的意图是当点击“开始获取”按钮时,该按钮先变成“获取中..”;
然后开始执行ajax,执行完后,该按钮的标题改为“获取结束”。可是由于优先级问题,程序并没有按照我的意图执行。程序执行ajax,然后执行document.getElementById("B1").value ="获取中.."。请问应该怎样修改该程序,才能使程序执行document.getElementById("B1").value ="获取中..",然后执行ajax?

解决方案 »

  1.   

    我用JQUERY。JS 一直都可以。。但是这个还真不知道,,期待高手另外说下,如果你用的是异步。。你 document.getElementById("B1").disabled =true;
     document.getElementById("B1").value ="获取结束"
    这句不一定会是在AJAX之后,,也许会在之前
      

  2.   

    怎么会呢?你这个ajax请求都设置成false了,程序应该就是按顺序执行的
      

  3.   

    我在开发的过程中也遇到了这样的问题,我分析是解释器引擎的优化作用结果,如果你把异步请求的那段代码随便换成alert什么的 这个是好用的
      

  4.   

    你可以设置一个函数来更改成获取中 然后用callback来进行Ajax请求 
      

  5.   

    这样试试:
    <input id="B1" type="button" value="开始获取" onmousedown="hq(0);" onmouseup="hq(1);">
    <SCRIPT language=javascript type=text/javascript>
    function hq(n){
      if(n==0){
        document.getElementById("B1").disabled =true;
        document.getElementById("B1").value ="获取中.."
        return;
      }
      var url="http://123.com/123/123.htm";
      var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");           
      xmlHttp.open("GET", url, false);    
      xmlHttp.send(null); 
      var ajx1=xmlHttp.responseText;  document.getElementById("B1").disabled =true;
      document.getElementById("B1").value ="获取结束"

    </script>
      

  6.   

    这个我估计不同的浏览器会有区别,当然你这里用的是ActiveXObject,针对的就是ie以前了解过ie6对dom的处理要滞后于bom,即使指向同一个元素,ie6之后的版本就没有了解过(没写js很久了)
    mozilla因为没有bom(新版ff4好像有了),所以……换浏览器测试一下看看不知道这个认知现在是否不合时代了,呵呵