ajax的post提交和get提交实现前后端交互

(一)json格式(两种)

  1. 对象格式:{"key1":obj,"key2":obj,"key3":obj...}
  2. 数组/集合格式:[obj,obj,obj...]

(二)json格式书写练习

(1)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>json01</title>
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
  </head>
  <body>
       <ul>
		 <li id="bj" name="beijing">北京</li>
	   </ul>
  </body>
  
  <script language="JavaScript">
	/**
	 * 案例一
	 *  {key:value,key:value}
	 *  
	 * class Person{
	 * 	  String firstname = "张";
	 *    String lastname = "三丰";
	 *    Integer age = 100;
	 * }
	 * 
	 * Person p = new Person();
	 * System.out.println(p.firstname);
	 */
	//json对象
	var person = {"firstname":"zhang","lastname":"sanfeng","age":"100"};
	//取出lastname
	alert(person.lastname);
	//取出age
	alert(person.age);
	//发布,在浏览器地址输入http://localhost:8080/AjaxDemo/json/json01.html

  </script>
</html>
(2)
<script language="JavaScript">
  	/**
	 * 案例二
	 *  [{key:value,key:value},{key:value,key:value}]
	 *  
	 */
	 //数组,集合形式
	 var persons = [
	                {"firstname":"li","lastname":"si","age":"34"},
	                {"firstname":"wang","lastname":"wu","age":"24"}
	                ];
	 //取出firstname=li
	 alert(persons[1].firstname);
	 //取34
	 alert(persons[0].age);
	 
	 
  </script>
(3)
<script language="JavaScript">
   /**
	 * 案例三
	 * {
	 *   "param":[{key:value,key:value},{key:value,key:value}]
	 * }
	 *  
	 *  
	 */
	 //对象格式,对象中value为一个数组,数组中又有多个对象,表现为数组格式与对象格式嵌套
	 
	var json = {
			"baobao":[
			          {"name":"小双","age":"28"},
			          {"name":"建宁","age":"18"},
			          {"name":"阿珂","age":"24"}
			     
			          ] 
	 //取name=建宁
	 alert(json.baobao[1].name);//对象.属性.属性
	 //取age=24
	 alert(json.baobao[2].age);
			 
	 } 
	
	
	
  </script>
(4)
<script language="JavaScript">
   /**
	 * 案例四
	 * {
	 *   "param1":[{key:value,key:value},{key:value,key:value}],
	 *   "param2":[{key:value,key:value},{key:value,key:value}],
	 *   "param3":[{key:value,key:value},{key:value,key:value}]
	 * }
	 *  
	 *  
	 */
	 var json = {
			       "param1":[
							  {key1:value1,key2:value2}
							  {key3:value3,key4:value4}
			                 ],
			 
			        "param1":[
							  {key5:value5,key6:value6}
							  {key7:value7,key8:value8}
					         ],
	             };
	 
	 //取value7
		alert(json.param1[1].key7);

  </script>
(5)
<script language="JavaScript">
 	/**
	 * 案例五
	 * {
	 *   "param1":"value1",
	 *   "param2":{},
	 *   "param3":[{key:value,key:value},{key:value,key:value}]
	 * }
	 *  
	 *  
	 */
	 var json = {
			 "param1":"value1",
			 "param2":{"firstname":"sun","lastname":"myth"},
			 "param3":[
						{key1:value1,key2:value2},
						{key3:value3,key4:value4}
			           ]
	 };
	 //對象導航
	 //取myth
	 alert(json.param2.lastname);
	 //取value3
	 alert(json.param3[1].key3);
  </script>

     

 (三)ajax前后端交互

(1)目录结构

(1)jquery_ajax.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 用的jQuery,记得导包
注意jQuery导入的路径写法
 -->

<script type="text/javascript" src="jquery-1.11.3.min.js"></script>

<script type="text/javascript">
/*//验证jQuery引入是否发生错误,用弹出框检验
$(function(){
	alert();
});*/

	function fn1(){
		/*
		jQuery.get(url, [data], [callback](回调函数), [type])
		jQuery=$
		[data],[callback],[type]都是可选的
		*/
		//get异步访问
		//alert();
		$.get(
			"/AjaxDemo/ajaxServlet2",//url地址
			{"name":"zhangsan","age":"24"},//请求参数
			function(data){//执行成功后的回调函数,在此处将其写成匿名函数
				//{\"name\":\"tom\",\"age\":\"26\"},既然字符串在此处被解析为json对象
				//那么可以采用对象导航的方式取值,data即为该对象
				//alert(data.name);
				alert(data);//此处的data表示服务器端返回的数据
			},//若后面不写回调函数,此处没有,号
			//"text"//返回内容格式为text
			"json" //返回内容data必须为json格式的字符串,否则报错(比如返回字符串"success.."")
			//在回调函数中会将服务器返回的json字符串解析为json对象
		);
	}//若果用get提交方式传输中文数据,会出现乱码,可以进行先编码再解码的方法解决
	//{"name":"张三","age":"24"},
	
	function fn2(){
		$.post(
				"/AjaxDemo/ajaxServlet2",
				{"name":"zhangsan","age":"24"},
				function(data){
					
					alert(data.age);
				},
				
				"json" 
				
			);
	}
	//jQuery方法进行post提交不用解决中文乱码问题,在jQuery内部已经进行了乱码处理
	//既不用书写request.setCharacterEncoding("UTF-8");
</script>
</head>
<body>
	<input type="button" value="get访问服务器" onclick="fn1()"/><span id="span1"></span>
	<br/>
	<input type="button" value="post访问服务器" onclick="fn2()"/><span id="span2"></span>
	
</body>
</html>
(2)AjaxServlet.java
package com.shu.hj;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AjaxServlet2
 */
public class AjaxServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
   

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println("name: "+name+" age: "+age);
	//当前端页面数据提交过来后,服务器端需要返回信息
		response.getWriter().write("success...");
	//此时返回一个字符串"success...",考虑一下前端如何接收
	//在回调函数中接收
		
	/*
	 如果返回格式要求为json,则服务器端Java代码只能返回一个json格式的字符串
	 {"name":"tom","age":"26"}
	 * */
		//System.out.println("{"name":"tom","age":"26"}");
		//以上直接将json格式字符串放入其中会报错,会发现花括号里外都是双引号
		//如果将内部改为单引号System.out.println("{'name':'tom','age':'26'}");
		//此时同样会报错,{'test': 1} (使用了单引号而不是双引号)会被识别为畸形json格式
		System.out.println("{\"name\":\"tom\",\"age\":\"26\"}");//使用转义字符

注意:回调函数中的数据是用response.getWriter().write()传递的,不是System.out.println().
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
(3)web.xml

  <servlet>
    <description></description>
    <display-name>AjaxServlet2</display-name>
    <servlet-name>AjaxServlet2</servlet-name>
    <servlet-class>com.shu.hj.AjaxServlet2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AjaxServlet2</servlet-name>
    <url-pattern>/ajaxServlet2</url-pattern>
  </servlet-mapping>

(2)结果

在浏览器中输入页面地址

(4)ajax提交

function fn3(){
		$.ajax({
			url:"/AjaxDemo/ajaxServlet2",
			async:true,
			type:"post",
			data:{"name":"Stephen chow","age":"55"},
			success:function(data){
				alert(data.name);
			},
			error:function(){
				alert("请求失败");
			},
			dataType:"json"
			
		});
		
	}

发现在AjaxServlet.java文件中:

使用了打印语句来打印,而不是使用response.getWriter().write()来返回服务端的数据

猜你喜欢

转载自blog.csdn.net/JayBillions/article/details/81350325