纯js写的Ajax

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+"");
}


java文件:

<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;
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值