$.ajax传递json格式参数,某属性为null,取值为空字符串的问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$.ajax传递json格式参数,某属性为null,取值为空字符串的问题。相关的知识,希望对你有一定的参考价值。

先前使用dojo的xhrpost做ajax处理,现在改成jquery,发现提交ajax请求时,到后台的参数解析会将null解析为空字符串。请问如何能将null传过去(除了不传递这个参数)?又或者是jquery不支持传递null解析为null?
$.ajax(
/*参数包含数组的时候,传入此属性*/
traditional:true,
type : "post",
url : 某url,
data : 'aa':null,
dataType : "json",
/* 同步请求,锁住浏览器 */
async : false,
timeout : 5000,
success : function(response)
/* 当服务器端返回检测消息之后,将调用 */
var returnValue = response.returnObject;
isPassed = returnValue;
,
error : function()
console.debug('请求出错');

);
后台现在接受到aa的值为空字符串“”,如何才能接受到null,不是"null"

对于服务器端来说接收的json数据格式都是字符串类型的,javascript的变量类型是无法和后端语言通用的 ,查查B/S架构的原理就明白了。服务器端可以设置 接收到""时设定变量为null 保存起来。 参考技术A 不传值,就是null。。。亲试 参考技术B ,满载剡溪船。中途不遇人, 参考技术C 你这样写的就是null 而不是字符串null 参考技术D data : aa:"",

spring mvc+ajax 实现json格式数据传递

技术图片

使用ajax传递JSON对象

下面示例为ajax发送json对象,返回json格式数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$.ajax(
url: "api/user",
type: "POST",
timeout: txnTimeOut,
async: true,
dataType: "json",
data: username : "lucy",
//contentType:'application/json;charset=UTF-8',
success: function(e)
if($.txnIsSuzccess(e.respCode))
//window.location.href=e.codeUrl;
console.log(e);
else
exceptionHandle(e);
,
error: function(e)
errorHandle(e);
);

注意:这里不能加下面这行,否则数据会传不到后台

1
contentType:'application/json;charset=UTF-8',

后台代码

1
2
3
4
5
6
7
@PostMapping(value = "/api/user", produces = "application/json;charset=utf-8")
public Student (String username)
/* 逻辑代码 */
return null;
1
2
//produces属性表示返回数据类型为json
produces = "application/json;charset=utf-8"

使用ajax传JSON字符串,使用@RequestBody接收

传递json格式字符串,返回json数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$.ajax(
url: "find",
type: "POST",
timeout: txnTimeOut,
async: true,
contentType: 'application/json;charset=UTF-8',//关键是要加上这行
dataType: "json",
data: '"name":"手机","price":999',
success: function(e)
if($.txnIsSuzccess(e.respCode))
console.log(e);
else
exceptionHandle(e);
,
error: function(e)
errorHandle(e);
);

后台代码

1
2
3
4
5
6
7
8
9
//consumes的作用是指定请求数据的格式类型,可以同时指定数据格式类型以及字符编码
//produces的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码
@PostMapping(value = "/find", consumes = "application/json;charset=utf-8", produces = "application/json;charset=utf-8")
public User findUserByName(@RequestBody User user)
log.info("user>>>>> " + user);
return userService.findByName("");

ajax代码说明

1
2
3
4
5
6
//contentType指定传递的数据为json字符串(如果不指定为application/json;charset=UTF-8,
//后台无法进行参数绑定)
contentType: 'application/json;charset=UTF-8',//关键是要加上这行
//dataType指定返回的数据为json数据格式
dataType: "json",

java代码说明

1
2
3
4
5
6
7
//consumes的作用是指定请求数据的格式类型,可以同时指定数据格式类型以及字符编码
//produces的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码
@PostMapping(value = "/find", consumes = "application/json;charset=utf-8", produces = "application/json;charset=utf-8")
//@RequestBody注解用来接受json数据,进行参数绑定(如果不在参数前使用此注解,无法进行参数绑定)
//@ResponseBody注解用来生成json数据
public User findUserByName(@RequestBody User user)

注意: ajax代码中必须指定contentType为json数据格式,同时java代码中必须在参数前使用@RequestBody注解,

否则无法进行参数绑定,后台无法获取前台传递的数据

User类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* Created by zhouxu on 2017/12/15 15:58.
*/
public class User
private String name;
private double price;
public User()
public User(String name, double price)
this.name = name;
this.price = price;
public String getName()
return name;
public void setName(String name)
this.name = name;
public double getPrice()
return price;
public void setPrice(double price)
this.price = price;
@Override
public String toString()
return "User" +
"name='" + name + ''' +
", price=" + price +
'';

使用ajax请求key/value,输出是json

ajax代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//请求key/value,输出是json
function responseJson()
$.ajax(
type:'post',
url:'api/user',
//请求是key/value这里不需要指定contentType,因为默认就 是key/value类型
//contentType:'application/json;charset=utf-8',
//数据格式是json串,商品信息
data:'name=手机&price=999',
success:function(data)//返回json结果
alert(data.name);
);

java代码

1
2
3
4
5
6
7
8
@PostMapping(value = "/api/user")
public User findUserByName(@RequestParam(value = "name") String name, @RequestParam(value = "price") double price)
//System.out.println("name>>>>>>>>" + name + " price>>>>>>>>" + price);
log.info("name>>>>>>>>" + name + " price>>>>>>>>" + price);
return userService.findByName(name);

代码说明

请求是key/value类型,这里不需要指定contentType,因为默认就 是key/value类型

博客中若有错误,欢迎大家指出噢,大家共同学习,共同提高,嘿嘿

分享

原文:大专栏  spring mvc+ajax 实现json格式数据传递


以上是关于$.ajax传递json格式参数,某属性为null,取值为空字符串的问题。的主要内容,如果未能解决你的问题,请参考以下文章

postman如何传递对象数组

jquery怎么传递json格式的参数

使用原生的ajax如何去提交json格式的数据

从 ajax 调用传递到 wcf 的参数被接收为 null

在struts2+ajax使用json传递数据的工程中,返回的数据为null

Node.js -- Ajax编程基础