ajax发送请求的数据结构

5 篇文章 0 订阅

ajax前后端的数据交互

1、ajax 发送字符串类型

前端:

	// 发送ajax测试数据
				$.ajax({
					url: "settings/test/ajaxStr/toRecStr.do",
					data:{
						"code":"123",
						"name":"张三"
					},
					type:"post",
					dataType:"json",
					success:function (data) {

					}
				})

后端接收:

当前端默认 ContentType 传参时,后端依次接收数据,可省略参数注解 @requestParam

@Controller
@RequestMapping("/settings/test")
public class TestController {
    @RequestMapping("/ajaxStr/toRecStr.do")
    public String toRecStr(String code,String name){
        System.out.println(code);
        System.out.println(name);
        return "aaa";
    }
}

2、ajax 发送实体类对象数据

发送实体类数据,需要先写好实体类,用于接收数据

注意:

  • 实体类字段必须和前端数据的key 一一对应
  • 前端数据的key不能出现实体类没有的字段,否则实体类全部接收不到数据

定义实体类:

定义实体类的时候,默认实现一些序列化接口,否则在网络传输过程中进行无法进行读写操作

public class DictionaryValue implements Serializable {
    private String id;
    private String value;
    private String text;
    private String orderNo;
    private String typeCode;
}

前端代码:

//定位发送Dom按钮
			$("#ajaxDom").click(function () {

				// 发送ajax测试数据
				$.ajax({
					url: "settings/test/ajaxDom/toRecDom.do",
					data:{
						"id":"111",
						"value":"张三",
						"text":"测试文本",
						"orderNo":"22"
						// "typeCode":"33"
					},
					type:"post",
					dataType:"json",
					success:function (data) {

					}
				})
			})

后端接收代码:

    @RequestMapping("ajaxDom/toRecDom.do")
    public String toRecDom(DictionaryValue dictionaryValue) {
        System.out.println(dictionaryValue);
        return "1";
    }

3、ajax 发送数据后端用 Map 接收

使用Map接收数据,适用于所有的场景

前端代码:

//定位发送Map按钮
			$("#ajaxMap").click(function () {

				// 发送ajax测试数据
				$.ajax({
					url: "settings/test/ajaxMap/toRecMap.do",
					data:{
						"code":"123",
						"name":"张三"
					},
					type:"post",
					dataType:"json",
					success:function (data) {

					}
				})
			})

后端接收代码:

参数需要加注解 @RequestParam,不加注解后端接收不到数据

    @RequestMapping("/ajaxMap/toRecMap.do")
    public Map<String,Object>  toRecMap(@RequestParam Map<String,Object> hashMap){
        System.out.println(hashMap);
        return HandleFlag.successObj("data",hashMap);
    }

后端Map映射文件使用参数

  • collection : 迭代的集合,是 mapper文件中加的参数注解的值

    int toSaveValue(@Param("dicValueMap") Map<String, Object> info);
    
  • 一个集合在一个sql中只能循环迭代一次,如果需要迭代2次,则需要传递2个相同集合即可


    <insert id="toSaveValue" parameterType="map">
            INSERT INTO tbl_dic_value
            (typeCode,orderNo,value,text,id)
            VALUES
            <foreach collection="dicValueMap" item="value" open="(" close=")" separator=",">
                #{value}
            </foreach>
    </insert>

4、ajax转换成JSON字符串进行传参

前端使用 contentType: “application/json; charset=utf-8” 的时候,必须要将JSON对象转换为JSON字符串进行传递,后台必须使用 @resquestBody 接收

1、后端使用实体类配合 @requestBody 接收

前端代码:

//定位发送ajaxJson按钮
			$("#ajaxJson").click(function () {
				var dictionaryValue = {
					"id":"111",
					"value":"张三",
					"text":"测试文本",
					"orderNo":"22"
					// "typeCode":"33"
				}
				// 发送ajax测试数据
				$.ajax({
					url: "settings/test/ajaxJson/toRecJsonStr.do",
					contentType:"application/json;charset:utf-8",
					data:JSON.stringify(dictionaryValue),
					type:"post",
					dataType:"json",
					success:function (data) {

					}
				})
			})

后端代码:

    @RequestMapping("/ajaxJson/toRecJsonStr.do")
    public Map<String,Object> toRecJsonStr(@RequestBody DictionaryValue dictionaryValue){
        System.out.println(dictionaryValue);
        return HandleFlag.successTrue();
    }

2、后端使用 Map 配合 @requestBody接收

前端代码:

//定位发送ajaxJson按钮
			$("#ajaxJson").click(function () {

				// 发送ajax测试数据
				$.ajax({
					url: "settings/test/ajaxJson/toRecJsonStr.do",
					contentType:"application/json;charset:utf-8",
					data: JSON.stringify({
						"name":"张三",
						"age":"18"
					}),
					type:"post",
					dataType:"json",
					success:function (data) {

					}
				})
			})

后端代码:

    @RequestMapping("/ajaxJson/toRecJsonStr.do")
    public Map<String,Object> toRecJsonStr(@RequestBody Map<String,Object> map){
        System.out.println(map);
        return HandleFlag.successTrue();
    }

5、将查询到的数据再前端动态展示

1、前端新增字典值,后台数据展示到前端下拉框

前端代码,点击创建跳转到新增静态页面:

        <button type="button" class="btn btn-primary" onclick="window.location.href='settings/dictionary/value/toSaveValue.do'"><span
                class="glyphicon glyphicon-plus"></span> 创建
        </button>

后端代码:

model集合的数据可以在 return的页面中使用

    @RequestMapping("/value/toSaveValue.do")
     public String toSaveValue(Model model){
         //通过 服务层,dao层查询到的数据集合
        List<DictionaryType> dictionaryTypeList = dictionaryService.findAllDicType();
         //将数据集合设置到model中
        model.addAttribute("dictionaryTypeList", dictionaryTypeList);
         //重点:返回指定页面,数据也会返回到该页面
        return "/settings/dictionary/value/save";
    }

前端使用数据

使用jstl中的c标签,需要导入依赖:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

c标签迭代循环的参数说明:

参数说明:
1)items:是集合,用EL表达式;
2)var:变量名,存放items各个项 ,代表集合中每一条数据
3)varStatus: 显示循环状态的变量,有一下几个属性:
①index:从0开始; 显示当前迭代的索引值
②count:元素位置,从1开始; 显示当前迭代显示的行位置,通过配合判断语句,实现给奇、偶行着不同的色,以进行分区
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束(整型);
6)step:步长,循环间隔的数值(整型);

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<select class="form-control" id="create-dicTypeCode" style="width: 200%;">
				  <option></option>
                    <!--使用jstl中的c标签,取出model传递的数据,items:数据集合,var:循环后的单条数据-->
					<c:forEach items="${dictionaryTypeList}" var="dt" varStatus="dtStatus">
						<option>${dt.name}</option>
					</c:forEach>
				</select>

2、前端列表选择数据jquery写法

              //定义一个变量,接收选择到的列表对象
				var curEl = null
                //从table 标签下的 tbody 标签下的数据,进行循环遍历
             	$('table tbody tr').each((inx,el)=>{
                    //从找到的元素下寻找 td元素,进行循环遍历
                    $(el).find('td').each((chinx,chel)=>{
                        //如果找到的元素下的 input 标签是被选中状态,就将该元素存储到变量中
                        if($(chel).find('input').is(':checked')){
                            curEl = el
                        }
                    })
                })
                var obj = {}
                // 循环元素中的键值对
                $(curEl).find('td').each((inx,el)=>{
                    // 如果索引不是0,则将键值对加入到数据对象中
                    if(inx != 0){
                        obj[inx] = $(el).html();
                    }
                })

                console.log(obj)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ajax基础  使用Ajax发送异步请求  在请求和响应中使用XML  使用JSON进行数据传输 DOM基础  DOM是”Document Object Model”(文档对象模型)的首字母缩写。当创建了一个网页并把它加载到Web浏览器中时,就会在幕后创建一个文档对象模型  DOM表示被加载到浏览器窗口里的当前页面:浏览器向我们提供了当前页面的模型,而我们可以通过JavaScript访问这个模型  DOM把一份文档表示为一棵树  如下的HTML页面:  浏览器加载该页面并将之转换为树形结构:  DOM树中的一切是以最外层的HTML包含元素,即html元素开始的。使用树的比喻,这叫做根元素(root element)  从根流出的线表示不同标记部分之间的关系。head和body元素是html根元素的孩子(child);title是head的孩子,而文本 “Trees, trees, everywhere”是title的孩子;相对的,head是title的父亲(parent),title是文本 “Trees, trees, everywhere” 的父亲。处在同一层次的且互不包含的两个分支(如head和body)之间称为兄弟(sibling)关系。整个树就这样组织下去,直到浏览器获得与上图类似的结构  通常把这样的树结构成为一棵节点树 节点 (node)  DOM文档是由节点构成的集合,此时的节点是文档树上的树枝或者树叶  DOM中节点的类型:  元素节点(element node),诸如<head>、<p>、<div>等。元素节点可以包含其它的元素,唯一没有被包含在其它元素里的元素是<html>,它是根元素  属性节点(attribute node),元素或多或少地有一些属性,属性可以对元素做出一些具体的描述。因为属性总是被放到起始标签里,所以属性节点总是被包含在元素节点中  文本节点(text node),<h1>元素中包含着文本节点“Trees, trees, everywhere” 基本DOM方法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值