action 中调用 ajax 的乱码问题解决

本文介绍了一个使用Struts框架中的Action来输出XML数据的例子,并展示了如何通过JavaScript调用该Action获取数据并动态更新页面内容的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键:当我们在Action中定义输出文件流时编码设置需要位于文件输出流之前:如下

 public void getSubCatalog(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  String kindtype = request.getParameter("kindtype");
  int index = Integer.parseInt(request.getParameter("index"));
  MyPageManager mgr = (MyPageManager) getBean("myPageManager");
  String result = mgr.getAlarmSelect(1, kindtype, index);
  
  response.setContentType("text/xml;charset=UTF-8");//
  response.setHeader("cache-control", "no-cache");

  log.info(result);
  PrintWriter out = response.getWriter();

  out.write(result);
  out.flush();
  out.close();
 } 

JS:

 function setKindType(num)
 { 
  var kindtype = document.getElementById("kindtype" + num).value; 
  setKeywordType("keywordtype","1")
  var xmlreq = null;
    if (window.XMLHttpRequest) {
      xmlreq = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      try {
        xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e1) {
        try {
          xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e2) {
          xmlreq = false;
        }
      }
  }
     xmlreq.onreadystatechange = function(){
      var returnContent = "";
      if(xmlreq.readyState == 4) {
         if (xmlreq.status == 200) {
     returnContent = xmlreq.responseText;
     var phtml =document.getElementById("id1").innerHTML;
     document.getElementById("id1").innerHTML = phtml + returnContent
         } else {
           alert("HTTP error "+xmlreq.status+": "+xmlreq.statusText);
         }
      }
     };
   cata_index = num +1 ;
  //alert(cata_index +1);
     xmlreq.open("POST","mypage.html?method=getSubCatalog",true);
     xmlreq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     xmlreq.send("kindtype="+kindtype+"&index="+cata_index);
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值