jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理

======================================

首先讲一下SpringMVC只需要在Spring web容器总共为RequestMappingHandleAdapter装配处理JSON的HttpMessageConverter,并在交互过程中通过请求的Accept指定MINE类型,SpringMVC就可以使服务器的处理方法和客户端JSON格式的消息进行通信了。@RequestBody注解用于读取request请求的body部分数据,使用系统,默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到Controller中方法的参数上。。。总而言之,下面测试的例子就只需要把Jackson的jar包加进来,然后就可以使用@RequestBody注解了,如果使用的是Jackson,那么Spring的HttpMessageConverter会帮我们做默认配置,如果使用的是其他包解析json,那么需要在springmvc的配置文件中进行配置。。

废话有点多,直接看代码……

========================================

1.首先是测试环境的搭建,本例使用MAVEN+SpringMVC搭建基础环境

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第1张图片

2.使用SpringMVC以及web项目所要的基本配置文件,以及maven的依赖管理pom.xml

pom.xml


  4.0.0
  com.lin
  My_AJAX_Test
  0.0.1-SNAPSHOT
  war


  
  	
  	
	
	    org.springframework
	    spring-webmvc
	    4.3.7.RELEASE
	
	
	
	    org.springframework
	    spring-aspects
	    4.3.7.RELEASE
		
	
  	
  	
	
	    javax.servlet
	    jstl
	    1.2
	
  	
	
	    javax.servlet
	    javax.servlet-api
	    4.0.1
	    provided
	
 
	
	    junit
	    junit-dep
	    4.10
	    test
	
	
	
	
	    com.fasterxml.jackson.core
	    jackson-databind
	    2.9.4
	
	
	
	
   
  

springmvc-config.xml



 
 
	
	
	
	
	
	
	
	
	
	
	
		
		
			/WEB-INF/content/
		
		
		
			.jsp
		
	
	
 

web.xml



  My_AJAX_Test
  
  
  
    springmvc
    
        org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:spring/springmvc-config.xml
    
    1
  
  
  
  
    springmvc
    /
  
  
  
  
	characterEncodingFilter
	org.springframework.web.filter.CharacterEncodingFilter
	
		encoding
		UTF-8
	
   
   
		characterEncodingFilter
		/*
	
 

=======================================

3.因为这里使用的是jQuery的AJAX,所以基础环境搭好以后加入jQuery的js库,自己百度下载去

========================================

4.写一个实体类

package com.lin.domain;

import java.io.Serializable;

public class Book implements Serializable {
	private static final long serialVersionUID = 1L;

	private Integer id;
	private String name;
	private String author;
	
	public Book() {
		super();
	}

	public Book(Integer id, String name, String author) {
		super();
		this.id = id;
		this.name = name;
		this.author = author;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

}

5.controller

package com.lin.controller;

import com.lin.domain.Book;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
@RequestMapping("/json")
public class BookController {
	
	@RequestMapping("/testRequestBody")
	@ResponseBody//这个注解表示将以下方法的返回值自动转换成json格式的数据(记得要添加jackson的jar包(无需配置)或者其它的第三方json类库(需另外在springmvc配置文件中配置))
	public Book setJson(Book book){
		book.setAuthor("林");
		System.out.println(book);
		return book;
	}
 
}

6.然后就是页面,我们将页面设置成当页面加载完成时自动发起AJAX请求,当然你可以通过事件来发送。。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




测试接收JSON格式的数据




	编号:
书名:
作者:

=============================

测试结果:

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第2张图片

 

==========================================

==========================================

下面测试解析集合的json数据

首先改下controller类

package com.lin.controller;

import com.lin.domain.Book;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
@RequestMapping("/json")
public class BookController {
	
	@RequestMapping("/testRequestBody")
	@ResponseBody//这个注解表示将以下方法的返回值自动转换成json格式的数据(记得要添加jackson的jar包(无需配置)或者其它的第三方json类库(需另外在springmvc配置文件中配置))
	public List setJson(Book book){
		List list = new ArrayList();
		Book b1 = new Book(1,"AJAX从入门到精通","林");
		Book b2 = new Book(2,"Java编程思想","外国");
		list.add(b1);
		list.add(b2);
		return list;
	}
 
}

 

然后是改下页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




测试接收JSON格式的数据




	编号:
书名:
作者:

测试结果在页面按F12,看控制台

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第3张图片

数据取到了,该怎么在页面显示那就不是问题了,处理一下就好了。。。

 

================================

==================================

==================================

粗浅的记录下,使用jQuery来发起AJAX请求,以及解析和接受的json数据的转换。。。

对了,这里要强调一下系统中web路径的问题,引用静态文件最好用${request.getContextPath()}方式,如下

或: 

一开始我这样 src="/static/js/jquery-1.12.4.min.js",发现在eclipse中可以找的到对应的文件,然后一发布,js效果没有出来,然后发现应该是路径这边出了问题,所以以上只是建议。。。

还有就是发请求也同样。。。

 

 

这里附上一个jQuery设置标签中值的方法(这里直接使用的是W3School中的jQuery相关的知识)









这是段落。

这是另一个段落。

Input field:

结果:

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第4张图片

 

=================================================

=================================================

=================================================

下面再附上一个实例,与上述差不多:

pom.xml


  4.0.0
  com.lin
  SpringMVCTest
  0.0.1-SNAPSHOT
  war

	
	  	
		  
		
		    org.springframework
		    spring-core
		    4.2.0.RELEASE
		
		
		
			org.springframework
			spring-webmvc
			4.2.0.RELEASE
		
		
	
		
		
		    com.fasterxml.jackson.core
		    jackson-databind
		    2.9.4
		
		
  	
 

web.xml



  SpringTagTest
  
  
    springmvc
    
        org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:spring/springmvc-config.xml
    
    1
  
  
  
  
    springmvc
    /
  
  
  
  
		characterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
  
	
		characterEncodingFilter
		/*
	
	

springmvc-config.xml



 
    
    
    
    
    
    
	
	
	
    
    
        
        
            /WEB-INF/content/
        
        
        
            .jsp
        
    
 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




首页

<%--  --%>



	
用户名:
性别:
密码:

AJAXControllerTest.java

package com.lin.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.lin.domain.User;

@Controller
public class AJAXControllerTest {

	@RequestMapping("ajaxTest")
	@ResponseBody
	public User ajaxTest(User user,HttpServletRequest request,HttpServletResponse response){
		
		System.out.println(user.getUsername());
		System.out.println(user.getSex());
		System.out.println(user.getPassword());
		
		User u = new User();
		u.setUsername("小杨");
		u.setSex("女");
		
		return u;
		
//		System.out.println(username);
//		System.out.println(sex);
		
	}
	
}

User.java

package com.lin.domain;

public class User {

	private String username;
	private String sex;
	private String password;
	
	
	public User() {
		super();
	}
	
	public User(String username, String sex, String password) {
		super();
		this.username = username;
		this.sex = sex;
		this.password = password;
	}
	
	@Override
	public String toString() {
		return "User [username=" + username + ", sex=" + sex + ", password="
				+ password + "]";
	}

	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

测试结果:

1.填写表单:

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第5张图片

2.1点击提交后控制台:

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第6张图片

2.2点击提交后表单页面:

jQuery使用AJAX发送请求,以及回调函数对json格式数据的处理_第7张图片

==========================

如果不使用jackson或者其他的一些处理json数据的jar包,那么就自己构造json格式的数据返回给前台也行,可以参考手动构造json格式的方式。。

以下不贴出全部代码,因为跟上面这个例子一模一样,只需改下controller即可(pom中的jackson依赖也可以去掉,不影响了):

package com.lin.controller;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.lin.domain.User;

@Controller
public class AJAXControllerTest {
	
	@RequestMapping("ajaxTest")
//	@ResponseBody
	public void ajaxTest(User user,HttpServletRequest request,HttpServletResponse response) throws IOException{
		
		System.out.println(user.getUsername());
		System.out.println(user.getSex());
		System.out.println(user.getPassword());
		
		User u = new User();
		u.setUsername("小杨");
		u.setSex("女");
		
		StringBuilder sBuilder = new StringBuilder();
		
		sBuilder.append("{\"username\":\""+"小杨"+"\",\"sex\":\""+"女"+"\"},");
		sBuilder.deleteCharAt(sBuilder.length()-1);
		
//		return u;
		System.out.println(sBuilder);
		//设置响应编码(这里有个问题就是,我明明在web.xml中配置了编码过滤器,但是这里如果不再设置响应编码还是会乱码。。。。)
		response.setCharacterEncoding("UTF-8");
		response.getWriter().print(sBuilder.toString());
		
	}
	
}

结果与上面的例子同。。。。。这里要注意一下就是回调函数编码的问题,具体在上述代码中指出。。我去百度找了下,暂时是没有找到能直接在页面ajax那边设置编码解决的方式

你可能感兴趣的:(JQuery)