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

 private void sendMsg2Stream(HttpServletResponse response,String message)
private void sendMsg2Stream(HttpServletResponse response,String message) {
{

 try
  try {
{
 response.setHeader("charset", "gb2312");
   response.setHeader("charset", "gb2312");
 response.setHeader("Cache-Control", "no-cache");
   response.setHeader("Cache-Control", "no-cache");
 response.setHeader("Pragma", "no-cache");
   response.setHeader("Pragma", "no-cache");
 response.setContentType("text/xml");
   response.setContentType("text/xml");
 response.getOutputStream().write(StringUtil.getUTF8Bytes(message));
   response.getOutputStream().write(StringUtil.getUTF8Bytes(message));

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

 function finishedAction(originalRequest)
  function finishedAction(originalRequest) {
{
 var res = originalRequest.responseText;//当然也可以返回xml
    var res = originalRequest.responseText;//当然也可以返回xml
 $('dbrglqx').innerHTML = res;
    $('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("Pragma", "No-cache");
 response.setHeader("Cache-Control", "no-cache");
  response.setHeader("Cache-Control", "no-cache");
 response.setDateHeader("Expires", 0);
  response.setDateHeader("Expires", 0);
 %>
%>

 var targetOrgObj=document.myForm.targetOrgId;
var targetOrgObj=document.myForm.targetOrgId;
 var optionsCount=targetOrgObj.options.length;
var optionsCount=targetOrgObj.options.length;

 for (var i=optionsCount-1; i>0; i--)
for (var i=optionsCount-1; i>0; i--) {
{
 targetOrgObj.options[i]=null;
 targetOrgObj.options[i]=null;
 }
}
 <c:forEach var="varValue" items="${values}">
<c:forEach var="varValue" items="${values}">
 var oOption=document.createElement("option");
 var oOption=document.createElement("option");

 oOption.text="<c:out value="$
 oOption.text="<c:out value="$ {varValue.orgName}" />";
{varValue.orgName}" />";

 oOption.value="<c:out value="$
 oOption.value="<c:out value="$ {varValue.orgId}"/>";
{varValue.orgId}"/>";
 <c:if test="${id==6}">
   <c:if test="${id==6}">
 <c:if test="${varValue.departmentCode == currentMeterRd}">
  <c:if test="${varValue.departmentCode == currentMeterRd}"> 
 oOption.selected=true;
   oOption.selected=true;

 
 

 
myForm的定义要弄清楚,它应该在你所(发送)请求的页面的document里的对象 
JS中(没什么好想的)

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

 
其它:
以上都是通过xmlhttp来用AJAX的,这样可以通过参数直接控制同步还是异步。
 var dbgl = new Ajax.Request(
var dbgl = new Ajax.Request(
 uri,
  uri, 

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

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

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