js页面封装好的Ajax方法:
function callbackDefaultNew(req, noHide, catchException) {
if (req.readyState == 4) {
if (req.status == 200) {
if (!noHide) {
if (window.hideWait != null) {
hideWait();
} else {
hideProcess();
}
}
if (catchException) {
try {
eval(req.responseText);
} catch (e) {
if (req.responseText.indexOf("登录超时") != -1) {
window.location.href = window.location.href;
} else {
alert(req.responseText);
}
}
} else {
eval(req.responseText);
}
req.abort();
req = null;
}
}
}
// parray为参数二维数组,parray[i][0]为name,parray[i][1]为value
// 如果callback设为null,使用同步ajax方式,return req.responseText
function executeXhrPostNew(callback, url, parray, extraParams, noHide, catchException) {
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
if (callback == null) {
req.open("POST", url, false);
} else {
req.onreadystatechange = function () { callback(req, noHide, catchException); };
req.open("POST", url, true);
}
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var length = parray.length;
var array = new Array(length);
for (var i = 0; i < length; i++) {
array[i] = "&" + parray[i][0] + "=" + encodeURI(encodeURI(parray[i][1])).replace(/&/g, "%26").replace(/\+/g, "%2b");
}
var param = array.join("");
if (param != "") {
param = param.substring(1);
if (extraParams != null) {
param += "&" + extraParams;
}
} else {
if (extraParams != null) {
param = extraParams;
}
}
req.send(param);
if (callback == null) {
return processSynch(req, noHide);
} else {
return req;
}
}
}
function processSynch(req, noHide) {
var rtn = req.responseText;
req.abort();
req = null;
if (!noHide) {
if (window.hideWait != null) {
hideWait();
} else {
hideProcess();
}
}
return rtn;
}
在jsp页面调用:
function showUserInfo(id){
var params = new Array();
params.push(new Array("id", id));
var url = ROOT_PATH + "query/selectuserajax.do";
executeXhrPostNew(callbackDefaultNew, url,params);
}
function message(name,phone,email){
alert("用户姓名:"+name+"\n联系方式:"+phone+"\n电子信箱:"+email+"");
}
<pre name="code" class="java">public class SelectUserAjaxAction extends AjaxBaseAction {
/* (non-Javadoc)
* @see stat2.web.AjaxBaseAction#buildResponse(org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest)
*/
private IUserManager um;
protected Object buildResponse(ActionForm form, HttpServletRequest request) {
String jsStr;
String uid=request.getParameter("id");
try{
User u=um.getUserByID(uid);
String name=u.getName();
String phone=u.getPhone();
String email=u.getEmail();
if(name==null){
name="";
}
if(phone==null){
phone="";
}
if(email==null){
email="";
}
jsStr = "message('"+name+"','"+phone+"','"+email+"');";
}catch (Exception e) {
e.printStackTrace();
jsStr = "message('"+uid+"');";
}
return jsStr;
}
/* (non-Javadoc)
* @see stat2.web.BaseAction#initBeans()
*/
protected void initBeans() {
this.um = (IUserManager) getSpringBean("userTree");
}
}
/**
* 专用于Ajax请求的相应服务,便于生成Ajax响应
* @author Cris YANG
*/
abstract public class AjaxBaseAction extends BaseAction{
/**
* 子类覆盖此函数,用来生成Ajax响应.在函数中可以直接使用out对象
* @author Cris YANG
* @param form
* @param request
* @param out
*/
abstract protected Object buildResponse(ActionForm form,HttpServletRequest request);
/* (non-Javadoc)
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//设置返回类型
response.setContentType("text/plain;charset=GBK");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
Object result = buildResponse(form,request);
PrintWriter out = response.getWriter();
String encodedResult = encodeObjectUsingSOTP(result);
out.print(encodedResult);
out.close();
return null;
}
public String encodeObjectUsingSOTP(Object object)
{
return "" + object;
}
}