个人笔记,不喜欢勿评论
今天学习了一下如何使用ajax传递json数据到后台
1、首先需要导入几个json的jar包;
2、开始写代码
前端代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="index.js"></script>
<script type="text/javascript" src="jquery-2.1.4.js"></script>
<script type="text/javascript">
function add() {
/**
当给个错误的url的时候,就会走到error方法里面,
该ajax请求会返回一个status code码,当返回值为200时,表示成功,执行success方法,否则执行error方法;
*/
/* $.ajax({
cache: true,
type: "POST",
url:"/Ajax/TestServlet",
data:$('#form1').serialize(),// 你的formid
async: false,
error: function(request) {
alert("提交失败");
},
success: function(data) {
/* $("#commonLayout_appcreshi").parent().html(data);*/
/* alert(data);
$("#div1").text(data);
}
}); */
/**
采用json的方式进行数据传递
*/
var jsonvalue = {
"name" : "丫丫",
"id" : 1,
"password" : 123456
};
var jsonshuzu = {
"name" : [ {
"age" : 25,
"height" : 160,
"weight" : 100,
"email" : "1946898935"
}, {
"age" : 26,
"height" : 178,
"weight" : 140,
"email" : "1234567"
} ],
"address" : [ {
"addressname" : "福州市"
}, {
"addressname" : "厦门市"
} ]
};
alert("走到了add方法里面");
/**
dataType : "json":的意思是从后台返回的值必须为json格式,否则将执行error方法
*/
$.ajax({
cache : true,
type : "post",
url : "/Ajax/TestServlet",
data : {
"ss" : JSON.stringify(jsonshuzu)
},
async: false,
error : function(request) {
alert("提交失败");
},
success : function(data) {
alert("data:" + data);
$("#div1").text(data);
}
});
}
</script>
</head>
<body>
<form id="form1">
<!-- 用户名:<input type="text" id="input1" name="username" id="yonghu"></input><br />
密码:<input type="password" name="password" id="mima"></input><br /> -->
<input
type="button" name="提交" value="提交" οnclick="add()"></input>
<div id="div1"></div>
</form>
</body>
</html>
后台接受的代码:
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
System.out.println("到了dopost方法中----------------------------");
PrintWriter out = response.getWriter();
/**
* 采用request.getParameter("username");获取从页面传来的值时,括号中的参数为页面中name的值
*/
/*String username=request.getParameter("username");
String passwrd=request.getParameter("password");
System.out.println(username+"/"+passwrd);
out.print(username+"/"+passwrd);*/
/**
* 接受从前端传递过来的json数据,要注意引入解析json的包
*/
String name=request.getParameter("ss");
JSONObject json=JSONObject.fromObject(name);
Iterator iter = json.keySet().iterator();
Map<String,String> map = new HashMap<String,String>();
/**
* 解析来自前端页面的值,解析json数组
*/
while (iter.hasNext()) {
String key = (String) iter.next();
String value = json.getString(key);
System.out.println("key:"+key+",value:"+value);
map.put(key, value);
}
String value=map.get("name");
JSONArray jsonArray =JSONArray.fromObject(value);
System.out.println("长度为:"+jsonArray.size());
for (int i = 0; i <jsonArray.size(); i++) {
int age=(Integer) jsonArray.getJSONObject(i).get("age");
int height= (Integer) jsonArray.getJSONObject(i).get("height");
int weight= (Integer) jsonArray.getJSONObject(i).get("weight");
String email=(String) jsonArray.getJSONObject(i).get("email");
System.out.println("获取到的值为:"+age+","+height+","+weight+","+email);
}
String values=map.get("address");
JSONArray jsonArray2=JSONArray.fromObject(values);
for (int i = 0; i <jsonArray2.size(); i++) {
String city=(String) jsonArray2.getJSONObject(i).get("addressname");
System.out.println("获取到的城市名为:"+city);
}
/**
* 前端页面设置了dataType为json格式,则后台返回时返回的格式必须为json格式
*/
out.print("提交成功");
out.flush();
out.close();
注意事项:
1、前端需注意的是①json数据的写法②ajax传递时,若定义datatype:"json",则表示后台返回的值必须为json格式才可以
2、后台需注意json数组的解析方式