jquery ajax向controller的传值总结

环境说明

jdk1.8,spring版本为4.3.3,jackson版本为2.8.9,lombok版本为1.18.10

如果你没有用lombok插件,将下面的@Data注解去掉,添加get和set方法也可以。

相关配置

applicationContext-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="controller"/>

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name = "supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
        <property name="prefix" value="/application/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

pom.xml自行配置,相关版本上面也说了,比较简单。

具体代码实现

controller层的代码

package controller;

import entity.Account;
import entity.User1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Controller
@RequestMapping("/user1")
public class User1Controller {
    
    @RequestMapping("/test1")
    @ResponseBody
    public String test1(HttpServletRequest request,String username) throws Exception{
        System.out.println(username);
        return "test1 success";
    }
    @RequestMapping("/test2")
    @ResponseBody
    public String test2(HttpServletRequest request,@RequestParam("username") String name) throws Exception{
        System.out.println(name);
        return "test2 success";
    }
    @RequestMapping("/test3")
    @ResponseBody
    public String test3(HttpServletRequest request,@RequestParam("username") String name,String password) throws Exception{
        System.out.println(name+":"+password);
        return "test3 success";
    }
    @RequestMapping("/test4")
    @ResponseBody
    public String test4(HttpServletRequest request,@RequestBody Integer[] ids
        /*@RequestBody List<Integer> ids  参数名字随意*/) throws Exception{
        System.out.println(ids.length);
        return "test4 success";
    }
    @RequestMapping("/test5")
    @ResponseBody
    public String test5(HttpServletRequest request,
                        //@RequestParam("datas[]") Integer[] ids
                        //@RequestParam("datas[]") Set<Integer> ids
                        @RequestParam("datas[]") List<String> ids
    ) throws Exception{
        //System.out.println(ids.length);
        System.out.println(ids.get(0));
        return "test5 success";
    }
    @RequestMapping("/test6")
    @ResponseBody
    public String test6(HttpServletRequest request,
                        //@RequestParam("datas[]") Integer[] ids
                        //@RequestParam("datas[]") Set<Integer> ids
                        @RequestParam("datas[]") List<Integer> ids
    ) throws Exception{
        //System.out.println(ids.length);
        System.out.println(ids.size());
        return "test6 success";
    }
    @RequestMapping("/test7")
    @ResponseBody
    public String test7(HttpServletRequest request, @RequestBody Map<String,Integer> map) throws Exception{
        System.out.println(map);
        return "test7 success";
    }
    /*
        对于复杂参数,将其封装在一个对象中
        前端将数据转化为json形式,传送到后端的controller
        controller层用@RequestBody接收
     */
    @RequestMapping(value = "/testdemo")
    @ResponseBody
    public String testdemo(HttpServletRequest request,
                           @RequestBody Account account
    ) throws Exception{
        System.out.println(account.getMessage());
        System.out.println(account.getUser1());
        System.out.println(account.getUser2s());
        System.out.println(account.getStringList());
        System.out.println(account.getStringArray());
        System.out.println(account.getIntegerSet());
        return "testdemo success";
    }
}

js的代码

$(function() {
	$("#test1btn").click(function () {
		$.ajax({
			type:"post",
			url:path+"/user1/test1.do",
			data : {"username" : "小明"},
			contentType : "application/x-www-form-urlencoded",
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test1 error");
			}
		});
	});
	$("#test2btn").click(function () {
		$.ajax({
			type:"post",
			url:path+"/user1/test2.do",
			data : {"username" : "小明"},
			contentType : "application/x-www-form-urlencoded",
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test2 error");
			}
		});
	});
	$("#test3btn").click(function () {
		$.ajax({
			type:"post",
			url:path+"/user1/test3.do",
			data : {
				"username" : "小明",
				"password" : "123456"
			},
			contentType : "application/x-www-form-urlencoded",
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test3 error");
			}
		});
	});
	$("#test4btn").click(function () {
		var test4Data=[1,2,3];
		var test4_json_data = JSON.stringify(test4Data);
		$.ajax({
			type:"post",//只能是post
			url:path+"/user1/test4.do",
			data : test4_json_data,
			contentType : "application/json",
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test4 error");
			}
		});
	});
	$("#test5btn").click(function () {
		var test5Data=['哈1','哈2','哈3'];
		$.ajax({
			type:"post",//或get
			url:path+"/user1/test5.do",
			data : {"datas" : test5Data},//或{"datas[]" : test5Data},推荐带上[],controller的@RequestParam不能省略[]
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test5 error");
			}
		});
	});
	$("#test6btn").click(function () {
		var test6Data=[1,2,3,3,3,3];
		$.ajax({
			type:"post",//或get
			url:path+"/user1/test6.do",
			data : {"datas[]" : test6Data.join()},//join不带参数则以,作为分隔符,防止数组为空时出错
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test6 error");
			}
		});
	});
	$("#test7btn").click(function () {
		/*
		var namevalue = "小明",passvalue = "123456";
		var test7Data = '{"name" : "'+namevalue+'" ,'+
			 ' "pass" : "'+passvalue+'"}';
		 */
		var value1 = 1,value2 = 2;
		var test7Data = '{"key1" : '+value1+' ,'+
			' "key2" : '+value2+'}';
		$.ajax({
			type:"post",//或get
			url:path+"/user1/test7.do",
			contentType : 'application/json',
			data : test7Data,
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("test7 error");
			}
		});
	});
	$("#testdemobtn").click(function () {
		var messagedata = '你好';
		var user1data = {
			'id' : 1,
			'username' : '小明',
			'password' : '123456'
		};
		var user2sdata = [
			{
				'sex' : '男'
			},
			{
				'sex' : '女'
			}
		];
		var stringListdata = ['哈1','哈2','哈3'];
		var stringArraydata = ['哈1','哈2','哈3'];
		var stringArraydata = ['哈1','哈2','哈3'];
		var integerSetdata = [1,1,2,2,3,3,4];
		var mapdata = '{"我是key1" : "我是value1" , ' +
			' "我是key2" : "我是value2" ,' +
			' "我是key3" : "我是value3"}'
		var data = {
			'message' : messagedata,
			'user1' : user1data,
			'user2s' : user2sdata,
			'stringList' : stringListdata,
			'stringArray' : stringArraydata,
			'integerSet' : integerSetdata,
			'map' : mapdata
		};
		$.ajax({
			type : 'post',//或get
			url : path + '/user1/testdemo.do',
			contentType : 'application/json;charset=UTF-8',
			data : JSON.stringify(data),
			success:function(data){
				alert(data);
			},
			error: function(){
				alert("testdemo error");
			}
		});
	});
})

/*
window.operateEvents={
	"click #editBtn": function (e, value, row, index) {
		$.ajax({
			type:"post",
			url:path+"/user1/edit.do",
			data : {"id" : row.id},
			dataType : "json",
			contentType : "application/x-www-form-urlencoded",
			success:function(data){
				$("#myformedit_id").attr("value",data.id);
				$("#myformedit_username").attr("value",data.username);
				$("#myformedit_password").attr("value",data.password);
			},
			error: function(){
				alert("error");
			}
		});
		$("#editsubmit").click(function () {
			$.ajax({
				type:"post",
				url:path+"/user1/update.do",
				data : $("#myformedit").serialize(),
				contentType : "application/x-www-form-urlencoded",
				success:function(data){
					$("#dataTable").bootstrapTable("refresh");
					alert("update success");
				},
				error: function(){
					alert("update error");
				}
			});
		});
	}
}

//ajax的dataType尽量别用,就在bootstraptable里用一下
$(function() {
	initTable();
	$("#addBtn").click(function () {
		$("#addsubmit").click(function () {
			$.ajax({
				type:"post",
				url:path+"/user1/add.do",
				data : $("#myformadd").serialize(),
				contentType : "application/x-www-form-urlencoded",
				success:function(data){
					$("#dataTable").bootstrapTable("refresh");
					alert("add success");
				},
				error: function(){
					alert("add error");
				}
			});
		});
	});
	$("#delOneBtn").click(function () {
		var rows = $("#dataTable").bootstrapTable('getSelections');
		var id;
		if (rows.length == 0){
			alert("必须选择数据");
			return;
		}
		if (rows.length >= 2){
			alert("只能选择一条删除");
			return;
		}
		else {
			id = rows[0]["id"];
		}
		//alert(id);
		$.ajax({
			type:"post",
			url:path+"/user1/delone.do",
			data : {"id" : id},
			contentType : "application/x-www-form-urlencoded",
			success:function(data){
				$("#dataTable").bootstrapTable("refresh");
				alert("delone success");
			},
			error: function(){
				alert("delone error");
			}
		});
	});
	$("#delManyBtn").click(function () {
		var rows = $("#dataTable").bootstrapTable('getSelections');
		var ids = [];
		if (rows.length == 0){
			alert("请至少选择一条要删除的记录!");
			return;
		}
		else {
			$(rows).each(function () {
				ids.push(this.id);
			});
		}
		$.ajax({
			type:"post",
			url:path+"/user1/delmany.do",
			contentType : "application/json;charset=UTF-8",
			data : JSON.stringify(ids),
			success:function(data){
				$("#dataTable").bootstrapTable("refresh");
				alert("delmany success");
			},
			error: function(){
				alert("delmany error");
			}
		});
	});
});
var tablecolumns=[
	{
		checkbox: true
	},
	{
		field : "id",
		title : "主键",
		align : "center"
	},
	{
		field : "username",
		title : "姓名",
		align : "center"
		
	},
	{
		field : "password",
		title : "密码",
		align : "center"
		
	},
	{
		field : "operate",
		title : "操作",
		align : "center",
		events : operateEvents,
		formatter : addFunctionalty
	}
	
];
function initTable(){
	$("#dataTable").bootstrapTable('destroy');//清空表的内容
	//生成新表
	$("#dataTable").bootstrapTable({
		url: path+"/user1/findAll.do",  //请求后台的URL
		method: "post", 					//请求方式
		contentType : "application/x-www-form-urlencoded",//处理post请求
		//toolbar: '#toolbar',              //工具按钮用哪个容器
		striped: true,						//是否显示行间隔色
		cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
		pagination: true,                   //是否显示分页(*)
		//sortable: true,                   //是否启用排序,也可以单独加在字段上面
		sidePagination: "client",           //分页方式:client客户端分页,server服务端分页(*)
		pageNumber: 1,                      //初始化加载第一页,默认第一页,并记录
		pageSize: 10,                     	//每页的记录行数(*)
		pageList: [5, 10, 20, 50],        	//可供选择的每页的行数(*)
		search: true,                      	//是否显示表格搜索
		strictSearch: true,					//设置为 true启用全匹配搜索,否则为模糊搜索。
		showColumns: true,                  //是否显示所有的列(选择显示的列)
		showRefresh: true,                  //是否显示刷新按钮
		minimumCountColumns: 2,             //最少允许的列数
		clickToSelect: true,                //是否启用点击选中行
		//height: 500,                      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
		uniqueId: "id",             //每一行的唯一标识,一般为主键列
		showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
		cardView: false,                    //是否显示详细视图
		detailView: false,                  //是否显示父子表
		columns: tablecolumns				//引入定义的列
	});
}
function addFunctionalty(value, row, index){
	return [
		"<button id = 'editBtn' class = 'btn btn-primary btn-lg' data-toggle='modal' data-target='#myEditFormModal'>编辑</button>"
	].join("");
}

 */

添加注释的为bootstraptable的简单实现,有兴趣的也可以研究一下,不难。

jsp的就比较简单了,添加几个按钮就行了,自己实现。

User1.java

package entity;

import lombok.Data;
@Data
public class User1 {
    private Integer id;
    private String username;
    private String password;
}

User2.java

package entity;

import lombok.Data;

@Data
public class User2 {
    private String sex;
}

Account.java

package entity;

import lombok.Data;

import java.util.List;
import java.util.Map;
import java.util.Set;

@Data
public class Account {
    private String message;
    private User1 user1;
    private List<User2> user2s;
    private List<String> stringList;
    private String[] stringArray;
    private Set<Integer> integerSet;
}

简单总结

除了map参数,别的都没必要将前端需要传输的数据转化为json形式并传输到controller层

如果传输map数据,那就只能传输一个map数据,不能携带别的数据;除非将map数据封装到一个对象中

可以将多种类型的数据封装到对象中传输(map除外)

基本就这样吧,有不懂的可以问我,算是总结的比较全了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值