JAVA

人生若只如初见,何事秋风悲画扇。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  50 随笔 :: 25 文章 :: 157 评论 :: 0 Trackbacks

用ajax有段时间了总结一下:

用xmlhttp去server取数据的时候,有如下二种方法
1:在server端通过response向流里写数据

private void sendMsg2Stream(HttpServletResponse response,String message){
  
try{
   response.setHeader(
"charset""gb2312");
   response.setHeader(
"Cache-Control""no-cache");
   response.setHeader(
"Pragma""no-cache");
   response.setContentType(
"text/xml");
   response.getOutputStream().write(StringUtil.getUTF8Bytes(message));
  }
catch(Exception e){
   e.printStackTrace();
  }

 }


 
 StringUtil.getUTF8Bytes是自写的一个类,因为xmlhttp中传数据的时候默认是UTF-8传的。
 这样可以防止乱码出现。
 
 在客户端JS中:

  function finishedAction(originalRequest){
    var res 
= originalRequest.responseText;//当然也可以返回xml
    $('dbrglqx').innerHTML = res;
 }

 
在server中假如返回一些字符串这样很方便,但如何想动态组合成一些list的option时,可能不太方便了,
这时可以通过JS的eval方法直接取一个页面内容。具体如下:
在server中返回的是一个页面,如在spring MVC中可能如下:
return new ModelAndView("redirect:data.html");
在返回前主可以做一些别的手术,典型的如request.setAttribute(name,value);
然后在JSP中进行解剖,如JSP中(这种情况下,把它当时在js文件就OK了):

<%
  response.setHeader(
"Pragma""No-cache");
  response.setHeader(
"Cache-Control""no-cache");
  response.setDateHeader(
"Expires"0);
%>

var targetOrgObj
=document.myForm.targetOrgId;
var optionsCount
=targetOrgObj.options.length;
for (var i=optionsCount-1; i>0; i--){
 targetOrgObj.options[i]
=null;
}

<c:forEach var="varValue" items="${values}">
 var oOption
=document.createElement("option");
 oOption.text
="<c:out value="${varValue.orgName}" />";
 oOption.value
="<c:out value="${varValue.orgId}"/>";
   
<c:if test="${id==6}">
  
<c:if test="${varValue.departmentCode == currentMeterRd}"> 
   oOption.selected
=true;
 

 

myForm的定义要弄清楚,它应该在你所(发送)请求的页面的document里的对象

JS中(没什么好想的)

function showResponse(originalRequest){
  eval(originalRequest.responseText);
}

 

 
其它:
以上都是通过xmlhttp来用AJAX的,这样可以通过参数直接控制同步还是异步。

var dbgl = new Ajax.Request(
  uri, 
  
{
   method: 
'get',
   parameters: 
'method=getYearFhqx&userId='+userId+'&timeStamp='+new Date().getTime(),
   asynchronous: 
true,
   onComplete: showResponse
  }
); 

  
最近用DWR用感觉不错,挺好的!它的util中还提供了不少的有用 & 常用的方法。不过一直不知道DWR中如何同步传输,今天找到了:
在DWR的engine.js文件,有setAsync方法,就是设置调用是否是同步的,还是异步的。

js 代码
 

DWREngine.setAsync(false);  
   
DWREngine.setAsync(
true);

 

 

posted on 2007-04-11 13:53 Jkallen 阅读(1086) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: