ajax向后端传递数据,后台通过变量、对象、Map接收

MVC下使用ajax接收后台的map值 笔记 项目中有一个功能涉及到需要用ajax接收后台传回来的多个值,在已经实现了传回一个值的基础上,我以为将后台的多个值打包成map传回来就完成了,谁想到错误百出。翻看了一上午的博客,没有一个能直接解决我的问题,总是看别人好像可以,我就不行,挣扎了许久终于从这个巨坑里面爬出来了,特此记录一下,如果有情况相同的可以适当借鉴一下。 第一步,先贴代码: 后台controller @RequestMapping(value = "/ajax/getStatus/map") @ResponseBody public Map ajax_uploadStatus_map(HttpSession 立即下载

示例

数据:{name:“zhangfan”,age:“18”}这种形式的ajax都会被转换成name=zhangfan&age=18进行传输。

ajax:

$.ajax({

    url:"/testmap/testMap",

    type:"post",

    dataType: "json",

    data:{name:"zhangfan",age:"18"}

})

后台接收

  1. 通过变量接收:只要变量名称与参数名称一致即可,也可以添加@RequestParam (通常在变量名和参数名一致的情况下省略)
@RequestMapping("/jsontest")
public void test(String name,Integer age  )
  1. 通过pojo对象接收:对象的属性名与参数一致即可,也可以给对象添加@RequestParam (通常在变量名和参数名一致的情况下省略)
@RequestMapping("/jsontest")
public void test(User user  ){
    String name = user.getName();
    Integer age = user.getAge();
}
  1. Map接收:@RequestParam
public void testMap (@RequestParam Map<String,Object> info){
    Object name = info.get("name");
    Object age = info.get("age");
    System.out.println("name:"+name+"age:"+age);
}
  1. 字符串接收,然后JSON转换
public void test(@RequestBody String jsonData) {
    JSONObject jsonObject = JSON.parseObject(jsonData);
    String uname= jsonObject.getString("name");
    Integer age= jsonObject.getInteger("age");
 }

content-type的含义

Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

js中传递JSON数据时,为啥有时候要转成JSON字符串,有时候又不用转呢?

1.转成JSON字符串传递方式
前端使用contentType:==“application/json; charset=utf-8”==的时候,必须要将JSON对象转换为JSON字符串

var user= {"username" : username,
           "password" : password};
          
$.ajax({
        url : "http://...../jsontest.do",
        type : "POST",
        async : true,
        contentType: "application/json; charset=utf-8",
        data : JSON.stringify(user),
        dataType : 'json',
        success : function(data) {
        }
 });

后端参数的用法不灵活,必须使用@RequestBody,这种方式下所有的参数都只能封装在User对象中,不能单独设置参数

@RequestMapping("/jsontest")
public void test(@RequestBody User user  ){
    String username = user.getUsername();
    String password = user.getPassword();
}
或者
@RequestMapping("/jsontest")
public void test(@RequestBody Map map  ){
    String username = map.get("username").toString();
    String password = map.get("password").toString();
}
或者
public void test(@RequestBody String jsonData) {
    JSONObject jsonObject = JSON.parseObject(jsonData);
    String username= jsonObject.getString("username");
    String username= jsonObject.getString("password");
 }

2.不用转成JSON字符串传递方式

此时请求的ContentType默认是application/x-www-form-urlencoded
后端不用使用@RequestBody,前端参数可以直接使用JSON对象(也可以使用JSON字符串)

$.ajax({
    url : "http://...../jsontest.do",
    type : "POST",
    async : true,
    data : user,
    dataType : 'json',
    success : function(data) {
    }
});
 
//后端参数的写法也很灵活:
@RequestMapping("/jsontest.do")
public void test(User user,String username,String password,Boolean rememberMe){
    System.out.println(user);
    System.out.println("username: " + username);
    System.out.println("password: " + password);
    System.out.println("rememberMe: " + rememberMe);
}

3.上传文件方式
content-type是multipart/form-data
我们使用表单 上传文件 时,必须让表单的enctype属性值为 multipart/form-data

两种方式都可以传递json数据,不过application/json方式前端必须传递的是JSON字符串,后端必须使用RequestBody接收,不是那么的灵活,而默认的application/x-www-form-urlencoded方式相对来说更加灵活

传递MAP到后端

/**
* 前端ajax代码部分
*/

var map = '{"account":"' + account + '"}';
//设定一个事件触发ajax
$.ajax({
   type : 'POST',
   contentType : 'application/json;charset=utf-8',
   url : "/",
   processData : false,
   dataType : 'json',
   data : map,
   success : function(data) {
       if(data == 1) {
           $("#text").html('<font color="#000000">aaa</font>');
       } else if(data == 0) {
           $("#text").html('<font color="#000000">aaa</font>');
       } else {
           $("#text").html('<font color="#000000">aaa</font>');
       }
   },
   error : function() {
       $("#text").html('<font color="#000000">aaa</font>');
   }
});
/**
 * 后端controller代码部分
 */
 
@RequestMapping("/")
public @ResponseBody Integer ajaxDemo(@RequestBody Map map) {
    try {
        //接收前端传递的map
        String str = (String) map.get("account");
        //假设做了一系列操作,判断是否return 0
        if() return 0;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 1;
}

传多个参数

/**
 * 前端ajax代码部分
 */
 
var map = '{"id":"' + $("#id").val() 
            + '","name":"' + name
            + '","price":"' + price
            + '"}';
// 设定一个事件触发ajax
$.ajax({
    type : 'POST',
    contentType : 'application/json;charset=utf-8',
    url : "/",
    processData : false,
    dataType : 'text',
    data : map,
    success : function(data) {
        var users = eval("("+data+")"); 
        var str = "";
        //用循环输出 users, i为index位置, user为每次循环的当前元素
        $.each(users, function (i, user) {  
            str += 'Account: <font size="3"><b>' + user.account + ' </b></font> '
            + ' Name: <font size="3"><b>' + user.name + '</b></font>';
            str += '<a href="/?id='+ user.account + '&name=' + user.name + '" οnclick="click();">aaa</a>';
            str += '<hr align="left" width="20%">';
        }); 
        //将 str 在页面中输出
        $("#List").html(str);
    },
    error : function() {
        $("#List").html('');
    }
});
@RequestMapping("/")
public @ResponseBody List<User> ajaxDemo(@RequestBody Map map) {
    List<User> list = null;
    try {
        //接收前端传递的map
        String str = (String) map.get("id");
        String str = (String) map.get("name");
        String str = (String) map.get("price");
        //假设做了一系列操作
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

转载: https://blog.youkuaiyun.com/beidaol/article/details/93845162.

WangEditor 5.0版本dangerouslyInsertHtml方法的正确使用方式 阅读详情

相关推荐

linux应用程序段错误调试

一、堆、栈 在分析段错误之前,先了解一下什么是堆?什么是栈? 堆:一般由开发者分配释放,如果没有释放,程序结束时,在有的OS中可能会被自动释放,分配方式类似于链表。堆的操作方式为,队列优先,先进先出的原则。 栈:由操作系统自动分配,存放函数的参数值,局部变量。栈的操作方式为,先进后出的原则。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。  PUSH:操作在堆栈的顶部加入一个元素...

农村种地人 1111

ajax传递map参数给后端

向后端传递一个参数 /** * 前端ajax代码部分 */ var map = '{"account":"' + account + '"}'; //设定一个事件触发ajax $.ajax({ type : 'POST', contentType : 'application/json;charset=utf-8', url : "/", processD...

有的话没说出来之前,你是他的主人,一旦说出来你就成了他的奴隶||想要干好事,别太把自己当人,别把别人太不当人||认识这个人就是开了一扇窗户,就能看到不一样的东西,听到不一样的声音,能让你思考、觉悟,这已经够了 1万+

深入解析.Net中SM2与sm-crypto的跨平台加解密实践

本文深入探讨了在.Net平台与前端sm-crypto库之间实现SM2国密算法跨平台加解密的实践方案。针对对接中常见的密钥格式、密文拼接顺序(C1C3C2与C1C2C3)等核心难点,提供了基于BouncyCastle的完整工具类实现、前后端联调示例及问题排查指南,旨在帮助开发者构建安全、兼容的数据加密通道。

weixin_29322855的博客 370

ajax前端传map数组,一文搞定RequestParam注解传参,map 数组 文件(二)

上篇讲了后台用@RequestParam来接各种参数,这篇就讲下用ajax作为前端往后台请求数据。回顾ajax请求常用的几个参数url请求地址data发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["b...

weixin_29471325的博客 1765

英飞凌TC3XX芯片---------CAN模块详解

CAN 总线是一种广泛应用于汽车、工业控制和其他领域的串行通信协议,CAN 英文名称:Controller Area Network。最初由德国的 Bosch 公司开发,用于汽车电子系统之间的通信。CAN 总线具有高可靠性、抗干扰能力强和实时性好等特点,因此被广泛应用于需要可靠数据传输的领域。CAN2.0B 协议中的 CAN 最多支持 29 位 ID,但是网络架构中使用的一般是 11 位的标准帧 ID。如下图是标准 CAN FD 帧数据结构:关于 CAN 协议相关内容,本文不作阐述。

sky的博客 3669

BK7238(XH-WB3S)固件烧录实战:从AT固件选择到稳定下载全解析

本文详细解析了BK7238(XH-WB3S)模组固件烧录的全过程,从AT固件版本选择到稳定下载的实战技巧。重点介绍了烧录前的准备工作、硬件连接的正确姿势、烧录软件的实战技巧以及疑难问题排查指南,帮助开发者高效完成BK7238模组的固件烧录。

weixin_29159441的博客 251

Ajax实现Map对象和对象数组传递

哒哒哒 js代码 //变更保存 function changeSave() { var $formParams = $('#form-info').serializeJson(); $.ajax({ url: ctx + '/conf/changeSave', type: &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;POST&a

nizhengjia的专栏 3705

基于POD和神经网络的多工况温度场重构反演系统

本文提出了一种基于本征正交分解(POD)和神经网络的多工况温度场重构反演系统。该系统通过POD方法从多工况温度场数据中提取主要特征模态,构建神经网络模型建立工况参数与POD模态系数的映射关系,实现温度场的快速重构。系统采用Python实现,包含数据预处理、POD分解、神经网络训练和温度场重构等模块。实验结果表明,该方法能够有效降低计算复杂度,实现高精度的温度场预测。

huanghm88的专栏 277

关于后台传值前台接收问题

一般情况,后台我们将值放入 request /modelandview/model中,然后在页面body中${字段名}就可以取出,但是如果在js里面获取的话,${}会被解析分解成js的语法,而无法实现我们的传值,解决方式var temp='${key}',在外面套一层引号即可...

ajax_yan的博客 3717

Qt实现窗口自适应分辨率大小

如果希望窗口大小始终保持与屏幕分辨率一致,可以将上述代码放在窗口的resizeEvent()函数中。这样,每当窗口大小发生变化时,都会自动调用resizeEvent()函数,从而实现窗口大小的自适应调整。在Qt中,可以通过一些简单的方法实现窗口大小随分辨率变化而自适应调整。获取到当前屏幕的分辨率后,可以根据需要调整窗口的大小。无论在何种分辨率下运行应用程序,窗口都能够正确地自动调整大小,提供更好的用户体验。除了调整窗口大小,还可以考虑将窗口设置为最大化,以充分利用屏幕空间。步骤2:调整窗口大小。

FuJavascript的博客 3655

信号与电源完整性5:轨道塌陷噪声/电源轨道噪声分析及降低解决方案

经过上一节关于串扰的分析,我们已经清楚,噪声问题不仅仅来源于信号网络;电源和地网络所产生的噪声,被反馈到其所在的元器件和信号网络时,其破坏力也是巨大的;本节所讨论的轨道塌陷噪声就是一个典型的实例。在经过电源的地网络的电流发生改变时,在电源和地之间的阻抗上将产生一个压降;由于该压降的产生,用电元件的电压将直接被拉低,甚至可能对电路产生功能性的错误。接下来硬小二将详细的分析电源轨道噪声和降低其的解决方法。...

fydar的博客 2241

ajax同时传map和list到java后端,map和list拼接成json,后端用map接收

今天给大家分享一下ajax同时传map和list到java后端,后端接收的方法。 本质上还是把map和list拼接成一个json字符串。 1.首先在js里创建一个map 一个list,然后给他们赋值 var list= new Array(); var map = new Map(); 2.接下来把list和map转换成json格式,list可以直接用JSON.stringify去转 ...

qq_40299028的博客 1129

【ARM Coresight | AMBA BUS | Cache 与 MMU/MPU | CoreLink | GCC | CSH 专栏导读】

1. ARM Coresight(SoC-400/SoC-600) 专栏 2. ARMv8/v9 CPU/Cache 专栏 3. Linux ARM AMBA 总线 专栏 4. Trace32/DS-5 专栏。。。

CodingCos的博客 8241

【转】ajax向后端传递数据,后台通过变量、对象、Map接收。

转自:https://blog.youkuaiyun.com/zf18234031156/article/details/84298270 数据:{name:"zhangfan",age:"18"}这种形式的ajax都会被转换成name=zhangfan&age=18进行传输。 ajax: $.ajax({ url:"/testmap/testMap", type:"po...

beidaol的专栏 8990

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java之提交数据 ---前端ajax向后端传递数据后台通过变量、对象、Map接收。

数据:{name:"zhangfan",age:"18"}这种形式的ajax都会被转换成name=zhangfan&amp;age=18进行传输。 ajax: $.ajax({     url:"/testmap/testMap",     type:"post",     dataType: "json",     data:{name:"zhangfan",ag

路漫漫其修远兮 5494

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SpringMVC如何使用ajax进行前后台交互(包含后台如何传递多个json给前台ajax)

知识点一:当要从前端传递ajax数据给后台Controller时,两种情况: 一.ajax基于form表单提交: //JS代码 function fun(){ var last; $.ajax({ type:"post", dataType:"json", contentType: "application/x-www-form-urlencoded; charset=UTF...

qq_40606397的博客 1249

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SpringMVC接收JSON数据的五种方式与AJAX的两种应用方式

前端以ajax默认方式传递数据 前端以ajax默认方式传递数据: 1.使用@RequestParam(“exampleName”) 接收数据 (如果省略@RequestParam(“exampleName”) 那么声名的参数变量需要与前端的key保持一致) 适用于:数据量较小的时候 2.使用@RequestBody Class 接收数据 (@RequestBody 可以省略,不影响) Ajax...

猫小伯的博客 3754

ajax传递的是html类型,ajax传json数组字符串

SpringMVC中使用List数据绑定,ajax怎么传输包含数后台解析ajax传递的数据,这主要看前端传递数据的格式,主要有以下几种常见的。前端ajax传递表单数据,类似{name:'zhangsan',age:'17'} 后台只需利用request.getParameter("name")形式即可获取对应的value值。前端传递json数据格式。ajax怎么获取json数组如题,服务器端将数据...

weixin_39828960的博客 415

SpringMVC参数传递——基本数据类型和复杂对象

前言 本文主要记录SpringMVC如何接收前台传过来的基本数据类型和对象,以及可能出现的组合。 在了解下面参数如何传递前先记住两个结论: 当Ajax以application/x-www-form-urlencoded编码格式上传数据,必须使用JSON对象传递数据,后台需要使用@RequestParam 或者HttpServletRequest来接收数据 当Ajax以application/js...

lxcoding 3191

ajax get请求传多个值,springMVC接收get请求传递多个参数

@RequestMapping(value = "/sendSignal/{state}/{limberId}/{account}", method = RequestMethod.GET)@ResponseBodypublic Map signal(@PathVariable int state, @PathVariable String limberId, @PathVariable Stri...

weixin_39747615的博客 2064

html5页面如何转为jsp,html页面如何变成jsp页面,如何和后台对接

1.将html页面变成jsp页面pageEncoding="utf-8"%>2.如何接收数据进行显示cellspacing="0">广告ID:广告名称:style="border-top: 1px solid #dadada;">value="查询">name="button" class="btn btn82 btn_search" value="重置">3.注意a...

weixin_39960147的博客 1012

java实现后台向页面传值_springMVC:后台传值并返回页面

java后台传值:request.setAttribute("msg","成功!!");jsp页面可以通过EL表达式获取到request中设置的属性值:${msg}js中获取request中的值var msg=""; alert(msg);JSP中:javascript中:var stuName=$('stuName').value;jsp页面用EL表达式获得值var msg = '${m...

weixin_34975747的博客 1477

Ajax 笔记(一)—— Ajax 入门

Ajax 笔记:Ajax 笔记(一)—— Ajax 入门Ajax 笔记(二)—— Ajax 案例Ajax 笔记(三)—— Ajax 原理Ajax 笔记(四)—— Ajax 进阶Ajax 笔记接口文档:使用浏览器的 XMLHttpRequest 对象 与 服务器 通信浏览器网页中,使用 AJAX技术(XHR对象)发起获取数据的请求,服务器代码响应准备好的数据给前端,前端拿到数据数组以后,展示到网页使用 cdn: axios 语法 1.2.1 URL URL 是统一资源定位符,简称网址,用于定位网络中的

小秀的博客 1138

jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数

  先来看一看jQuery的ajax核心处理流程($.ajax) a. ajax( [url,] options )执行流程   第一步,为传递的参数做适配。url可以包含在options中 //传递的参数只是一个对象 if ( typeof url === "object"...

chulinhu9266的博客 222
上一篇: springMVC与freewarker整合配置jsp、html视图解析器
Coder_Yhao
博客等级 码龄8年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值