Ajax拾荒

Ajax拾荒

用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 );

 

 

你可能感兴趣的:(Ajax拾荒)