写了一段代码,函数正常执行了,但是页面上ResponseText没有取到传回的值function test(element){
var trid=element.id;
var trvalue=element.value;
               if(window.ActiveXObject){
            try {
            http= new ActiveXObject("Msxml2.XMLHTTP") ;
             } catch (e) {
                try {
                 http= new ActiveXObject("Microsoft.XMLHTTP") ;
              } catch (e2) {
                return null;
               }
             }
             } else if(window.XMLHttpRequest){
         http= new XMLHttpRequest() ;
         } 
     
 var url = "${it.rootUrl}controller/off?id="+trid+"&name="+trvalue;
    http.open("GET",url,true);
    http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    http.send(null);
    http.onreadystatechange = callback;
}function callback(){
         if(http. readyState==2){
  if(http.status==200||http.status==0){
          var responseText = http.responseText;
          alert(responseText);
   }
}
}
java代码
public void doOff(StaplerRequest req, StaplerResponse rsp)
throws ServletException, IOException, InterruptedException {
String result=null;
......
result = "Shutting";
getResult(result);
       rsp.setContentType("text/html;charset=utf-8");
PrintWriter out=rsp.getWriter();
out.write(result); //将信息写入response
out.flush();
out.close();
}
}测试之后发现, readyState的值为2,status的值为0
然后输出responsetext的时候,就是一个空的对话框,看了下responsetext的长度未0
应该怎么改?是我后台传入数据的时候错了?

解决方案 »

  1.   

    onreadyStateChange事件是在readyState属性发生改变时触发的,readyState的值表示了当前请求的状态,在事件处理程序中可以根据这个值来进行不同的处理。 readyState有五种可取值0:尚未初始化,1:正在加载,2:加载完毕,3:正在处理;4:处理完毕。一旦readyState属性的值变成了4,就可以从服务器返回的响应数据进行访问了。 
    通常在事件中判断readyState的值是在请求完毕时才做处理,如: 
    function changeTabCallBack(){ 
    if(ajaxObj.readyState==4){ 
    // 下一步验证 

    } Status存储了服务器端返回的Http请求响应代码,它表示请求的处理结果,常见响应代码的含义如右。 
    在Ajax开发中,最常用就是200这个响应码,代码如下: 
    function changeTabCallBack(){ 
    if(ajaxObj.readyState==4){ 
    if(ajaxObj.status==200){ 
    // 服务端返回了正确数据,开始响应处理 



    Http状态码 含义 
    200 请求成功 
    202 请求被接受但处理未完成 
    400 错误请求 
    404 请求资源未找到 
    500 内部服务器错误 
      

  2.   

    我改了一下onchange的顺序,可以到达4了……
    但是测试之后,发现firefox中函数没有正常调用,ie中没问题...
      

  3.   

    以下信息供参考:
    1:你js中一句"if(http. readyState==2){" 貌似多了一个空格,而且应该按楼上所说改为4.
    2:在发送请求时指定编码
          http.setRequestHeader("contentType","text/html; charset=utf-8");//指定发送数据的编码格式
    3:在发送请求前把url转化一下
            
    url = encodeURI(url);
    url = encodeURI(url);//一共是两句,一样的3:如果是js有错,在firefox里有个错误控制台,可以查看错误出在哪
         [工具]-[错误控制台]
      

  4.   

    先保证后台有数据,然后看页面,javascript的话用alert吧
      

  5.   

    按trocp说的做了一下,还是老问题
    函数可以调用,但是firefox里面返回的responseText还是空的ie里面测试的话,第一次点击只执行到Readystate=1,函数调用了,然后第二次点击开始才会返回responseText的值。。不知道为什么,而且第二次开始点击就不执行函数了
      

  6.   

    我把input type改成了button之后,ie第一次点击执行正常了,但是第二次点击就不执行函数,直接出来responseText了,是因为没有关闭么?我加上了http.close()也不行
    firefox里面还是不出来文本……
      

  7.   

    我又测试了一下
    ie里面http.status是200
    但是ff里面是0
      

  8.   

    看服务器端返回的contentType是什么,如果是xml,那么responseText是无效的。