(1) 简单的没有用到json的传输字符串的方式为:
(登录功能作为例子)
后台的代码如下,用String类型的变量responseText来把数据传递给前台接收:
public String ajaxLogin() {
try {
String responseText ="";
//读取请求的参数
HttpServletRequest request = ServletActionContext.getRequest();
String loginname = request.getParameter("name");
String loginpwd= request.getParameter("pwd");
Manager manager = new Manager();
manager.setName(name);
manager.setPwd(pwd);
//进行登录验证
if (loginname ==null || loginname.trim().length() < 1) {
responseText = "对不起,账号不能为空";
} elseif (loginpwd==null ||loginpwd.trim().length()< 1) {
responseText = "对不起,密码不能为空";
} else {
if (managerDAO.checkManager(manager)) {
session.put("manager", manager.getName());
responseText ="1";
} else {
responseText ="0";
}
}
//获取原始的PrintWriter对象,以便输出响应结果,而不用跳转到某个试图
HttpServletResponse response = ServletActionContext.getResponse();
//设置字符集
response.setContentType("text/plain");//设置输出为文字流
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//直接输出响应的内容
out.println(responseText);
out.flush();
out.close();
} catch (Exception e) {
//TODO: handleexception
e.printStackTrace();
}
returnnull;//不需要跳转某个视图因为上面已经有了直接输出的响应结果
}
前台用jQuery实现的异步操作来处理后台传过来的数据:
varurl = "<%=basePath%>manager/managerAction!ajaxLogin";
$.ajax({url : url, type :"post", data :{name : $('#name').val() , pwd : $('#pwd').val()},
success : function(data) {
if(data==1){
window.location.href="<%=basePath%>index.jsp";
}else{
alert("登录失败:用户名或者密码错误");
}
}
});
}
(2) 第二种传递数据方式:(用json来传递数据,把一个要传得对象先序列化成json形式的)
后台是做一个将book对象转化成json对象的过程:
public String borrowlist()throws IOException {
System.out.println("borrowing......");
//读取请求的参数
HttpServletRequest request = ServletActionContext.getRequest();
String key = request.getParameter("inputkey");
if (key !=null && !key.equals("")) {
// String operator =request.getParameter("operator");
book =bookDAO.queryB(key);
session.put("book",book);
System.out.println("book:" +book);
}
if (book !=null) {
JSONObject jsonObject = JSONObject.fromObject(book);
HttpServletResponseresponse = ServletActionContext.getResponse();
response.setContentType("text/json");//设置输出为文字流
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(jsonObject.toString());
out.flush();
out.close();
}
returnnull;
}
前台接收json数据的格式如下:
functionborrowlist1(){
var inputkey=$('#inputkey').val();
if(inputkey==''){
alert("请输入图书编号");
return false;
}
var url="<%=basePath%>borrow/borrowAction!borrowlist";
vardata={inputkey:inputkey};
vartype="json";
$.post(url,data,function(result){
result = eval(result);
if(result==null){
alert("没有该书本信息");
return;
}
$(".table_borrow").append("<tr><td>"+result.bookName+"</td><td>"+newDate()+"</td><td>"+result.bookcaseName+"</td><td>"+result.price+"</td></tr>");
varbut=$('#button2').val();
document.getElementById("button2").disabled=false;
// $('#button2').disabled="disabled";
},type);
}
如果是对象的集合,传递的方式则如下:
后台代码中就用JSonArray这个类把集合序列化就好了,然后前台也以数组的方式来接收就好了
后台代码:
publicString bookborrow(){
System.out.println("borrowing......");
try {
StringresponseText="";
//读取请求的参数
HttpServletRequest request =ServletActionContext.getRequest();
Stringbarcode=request.getParameter("barcode");
Reader reader1=new Reader();
reader1.setBarcode(barcode);
Reader reader = (Reader) readerDAO.queryM(reader1);//查询该条形码的用户
List<Borrow>col=borrowDAO.borrowinfo(barcode);
JSONArray json4 = (JSONArray)JSONArray.fromObject(col);
HttpServletResponse response =ServletActionContext.getResponse();
response.setHeader("cache-control", "no-cache");
response.setContentType("text/json");//设置输出为文字流
response.setCharacterEncoding("UTF-8");
PrintWriter out =response.getWriter();
//直接输出响应的内容
out.println(json4);
/* JSONObjectjson=new JSONObject();
json.accumulate("success",true);
json.accumulate("readerinfo", reader);*/
// request.setAttribute("data", json4.toString());
/* JSONObject json2=newJSONObject();
json2.accumulate("success",true);
json2.accumulate("borrowinfo",borrowDAO.borrowinfo(barcode));
request.setAttribute("borrowdata", json2.toString());*/
//获取原始的PrintWriter对象,以便输出响应结果,而不用跳转到某个试图
/* HttpServletResponse response =ServletActionContext.getResponse();
//设置字符集
response.setContentType("text/plain");//设置输出为文字流
response.setCharacterEncoding("UTF-8");
PrintWriter out =response.getWriter(); */
//直接输出响应的内容
/* out.println(json.toString());
out.flush();
out.close(); */
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
前台代码:
//jqueryjson
$(document).ready(function(){
alert("jiazai");
$("input[name='button']").click(function(){
var barcode=$('#barcode').val();
alert("barcode"+barcode);
varurl="<%=basePath%>borrow/borrowAction!bookborrow";
vardata={barcode:barcode};
var type="json";
$(".tables>tbody").empty();
$.post(url,data,function(result){
result = eval(result);
alert("result:"+result.length);
$("#barcode").val(barcode);
alert(result.name);
for(var i=0;i<result.length;i++){
alert("result:"+result[i].bookName);
$("#readername").val(result[1].bookName);
//$('#readername').attr(result[1].bookName);
//$('#readername').val(result[i].bookid);
}
// var reader=eval(result);
// alert(reader);
//for(var i=0;i<result.length;i++){
//alert("result"+result[i].barcode);
//$(".tables>tbody").append("<tr><td>"+result[i].stuId+"</td><td>"+result[i].stuName+"</td><td>"+result[i].classname+"</td></tr>");
//}
},type);
});
});