我想在一个页面上用无刷新技术实现:当我点按钮后就把我需要的值传struts2的action,然后插入数据据库,要求就是点了按钮后,本页面同时还要查询出刚才的数据
var xmlHttp=false;
function getCustomerInfo(t){   try{
      xmlHttp=new XMLHttpRequest();
   }catch(trymicrosoft){
      try{
        xmlHttp=new ActiveXObject(Msxml2.XMLHTTP);
      }catch(othermicrosoft){
    try{
          xmlHttp=new ActiveXObject(Microsoft.XMLHTTP);
    }catch(failed){
  xmlHttp=false;
}
  }
   }
   if(!xmlHttp){
     alert("xmlHttp Error!!");
   }
   var feelCn=document.getElementById("feelCn").value;
   var feelEn=document.getElementById("feelEn").value;
   var price=document.getElementById("price").value;
   var url="modifyAddDelete!addFeeDetails.action?nid="+t+"&feelCn="+escape(feelCn)+"&feelEn="+escape(feelEn)+"&price="+escape(price);
   
   xmlHttp.open("GET",url,"true");
   alert(t+"  "+feelCn+"  "+feelEn+"  "+price);
   xmlHttp.onreadystatechange=handlestatechange;
   xmlHttp.send(null);
}
function handlestatechange(){
   if(xmlHttp.readyState==4){
     if(xmlHttp.status==200){
  ??请问这里要怎么才能取得struts2的Action处理后的结果(就是上面的feelEn,feelCn,price三个值)
   //alert("服务器处理完成");
 }else if(xmlHttp.status==404){
   alert("请求的url不存在");
 }else
   alert("xmlHttp status is:"+xmlHttp.status);//状态码为200
   }
}
function Add(t){
    getCustomerInfo(t);
     //form1.action="modifyAddDelete!addFeeDetails.action?nid="+t;
     //form1.submit();
    }

解决方案 »

  1.   

    struct会返回一个页面。
    可以通过XMLDom去解析。XMLDom=new ActiveXObject("Msxml2.DOMDocument");   
    XMLDom.async=false;   
    XMLDom.resolveExternals=false;   
    if(XMLDom.loadXML(xmlHTTP.responseText)){//现在XMLDom就和javascript里的Document类似
               feelEn= XMLDom.getElementsByTagName("feelEn")[0].text; //通过dom提供借口获取数据。        }
      

  2.   

    要使用dojo。
    具体怎么用,你网上自己查
      

  3.   

    对我自己的问题分析,当在struts.xml中result到一个物理视图时,再用<s:property value="feelCn"/>.....它可以在我发起请求的页面输出我想要的结果(这样做不是很好,后来知道可以用json来做,可以在javaScript中异步调用action,但确实不熟悉,还是有问题,比如var params = Form.serialize('form1');啥意思?我下过别人很多代码,反正总是在这行上出现问题),但是这些结果要怎么才可以按照一定的格式输出来呢?
      

  4.   

    在action的java代码里
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setContentType("text/html;charset=GB2312");
    response.setHeader("Cache-Control", "no-cache");
    response.getWriter().write("{result:"+isExist+"}");
    然后AJAX.JS里
    response = self.xmlhttp.responseText;
    应该可以得到返回值
      

  5.   

    正解,或者使用控件jQuery,YUI什么的
      

  6.   

    用JQuery吧 自己写出问题太多了
      

  7.   

    可以在action中声明一个Arraylist<String>,把查询的结果放到Arraylist<String>中,比如这个list变量名为results,现在在页面js代码中通过xmlHttp.results[i]访问,依次取出集合中的值。
      

  8.   

    ajax.返回如果是XML,IE是容易,其它游览器如何解析,我没用过也不清楚.一般我都用JSON
    eval(xmlHttp.responseText);就成了JSON对象.{a:"aaa",b:{c:"ccc"}}这样的东西.
    eval('('+xmlHttp.responseText+')');好像是这个,你试试.JSON不要有和JSON-LIB这个慢得可以,SIMPLE-JSON就快不少.
    如果只是普通的字符串,你也不需要解析,上面的兄弟已经说了var str=xmlHttp.responseText;就得到了Action print()的内容了
      

  9.   

    用DOM比较爽,参考:<html>
    <script>
      function DomUtil(){}
      
        DomUtil.initDomDoc = function()
        {
          var signatures = ["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","Msxml2.DOMDocument","MicroSoft.XmlDom"];
        for(var i=0;i<signatures.length;i++)
        {
            try
            {
                var domDoc = new ActiveXObject(signatures[i]);
                if(domDoc!=null)
                {
                    return domDoc;
                }
            }
            catch(e)
            {
                alert("Dom初始化失败!")
            }
        }
        }
        //根据文件的相对路径的文件名来创建xmlDoc
        DomUtil.loadXmlForPath = function(path)
        {
         var domDoc = DomUtil.initDomDoc();
         domDoc.async = false;
         domDoc.load(path);
         return domDoc;
        }
        //根据XML格式个字符串来创建xmlDoc
        DomUtil.loadXmlForString = function(str)
        {
         var domDoc = DomUtil.initDomDoc();
         domDoc.async = false;
         domDoc.loadXML(str);
         return domDoc;
        }
          
        var xmlDom;  //全局的xmlDom对象
        
        //页面初始化的时候加载xml
        function load()
        { 
           xmlDom = DomUtil.loadXmlForPath("class.xml");
           //得到XML的根元素   
            var rootElement = xmlDom.documentElement;
       
              //  var root = DomUtil.loadXmlForString(rootElement.xml);
           $("xmlStr").innerText = rootElement.xml;
           //alert(rootElement.xml);
           display();
        }
        
          function display()
          {
              var table = document.createElement("table");
              
            table.setAttribute("border",1);
       
            $("tableXml").appendChild(table);
            
            var tHead = table.createTHead();
                tHead.style.background = "#12c4dd";
                
            var headerRow =tHead.insertRow(0); //创建头插入第一行
            
            headerRow.insertCell(0).appendChild(document.createTextNode("stuName"));
            headerRow.insertCell(1).appendChild(document.createTextNode("stuAge"));
            headerRow.insertCell(2).appendChild(document.createTextNode("stuNo"));
            
            var students= xmlDom.getElementsByTagName("student");       //根据标签的名字获得所有的student 
           // var students = rootElement.childNodes;
           
              for(var i = 0; i < students.length; i++)
              {
               var tableRow = table.insertRow(i+1);   //往table里面插入行(Row)
              
               var stuAtts = students[i].childNodes;  //获得所有student的子节点
               for(var j = 0;j < stuAtts.length; j++)
               {
                 var stuAtt = stuAtts[j].childNodes[0].nodeValue;
                
                   tableRow.insertCell(j).appendChild(document.createTextNode(stuAtt));
                  
               }
               var stuNo = students[i].attributes[0].value;  //获得学号
              
                tableRow.insertCell(stuAtts.length).appendChild(document.createTextNode(stuNo)); 
              }   
          }    
          
          function $(varId)
        {
         return  document.getElementById(varId);
        }
    </script>

    <body onload="load();">
    <div id="tableXml"></div>
    <hr/>
    <div id="xmlStr"></div>
    </body>
    </html>
      

  10.   

    xml文件为 class.xml(这个是你后台response的String类型的xml)<class> 
        <student stuNo="stu01">
            <stuName>admin</stuName>
            <stuAge> 19 </stuAge>
        </student>
        
        <student stuNo="stu02">
            <stuName>user</stuName>
            <stuAge> 25 </stuAge>
        </student>
    </class>