Ajax不支持Form的异步提交,至少在IE6.0还没有支持这个功能,但愿之后会有所支持。
  有一种解决方案是将Form里的参数都转化成Get提交,这样可以解决一部分的需求,但毕竟,Post提交有它独特的优势。
  这面,我用一种很笨的方法来模拟实现Form的异步提交。
  简单说明一下原理:
  首先在首页里建一个隐藏的IFrame。提交时,可以把数据提交到这里。但是关键的问题是,并不是直接把Form提交到要显示的界面,而是通过一个FormRedirect (转交)Servlet把请求转发给显示的界面。在发送提交Form的同时并发产生一个异步的监听线程启动 Proxy(代理)Servlet。Proxy Servlet负责监听HttpSession实例对象的活动,可以设定它定时去监听一个对象,当此对象产生时,也就是转发工作完成时,FormRedirect 返回一个空值(向隐藏的IFrame返回一个空值),FormRedirect 的任务结束了。
  此时,Proxy接收到信息,根据设定转向到显示界面。页面处理完成,通知回调函数。这样一波三折,实现了Form的模拟异步提交(其实Form是用普通提交的,主要是产生了一个并发的异步线程)。

  虽然是转来转去,但这样做的好处是:
  实现了异步提交的效果(无闪提交,刷新)
  不用去直接面对编码问题(其实通常情况下是用一个过滤器进行转码的)
  可以简单,快速地进行大数据的提交,这项与把Form转换成get提交时编码有明显的速度优势

  

  缺点
  比较复杂
  要处理转发和启动一个监听线程,给服务器增添了压力(用get重新编码提交是在客户端完成,因此几乎对服务器没有这额外的负担)

   

   FormRedirect.java
并发请求解决Form的异步提交package com.ycoe.servlet.common;
并发请求解决Form的异步提交
并发请求解决Form的异步提交
import javax.servlet.*;
并发请求解决Form的异步提交
import javax.servlet.http.*;
并发请求解决Form的异步提交
import java.io.*;
并发请求解决Form的异步提交
import java.util.*;
并发请求解决Form的异步提交
import com.ycoe.common.EWebConfig;
并发请求解决Form的异步提交
import com.ycoe.common.Function;
并发请求解决Form的异步提交


                                            原创文章,可以随意复制发表,版权问题,请注明作者和出处!谢谢合作

相关文章: