为何getRowData()是空值?

我getRowData()一值是空值,而且getPara()和getModel()都取不到

前端部分代码是用ajax的post提交的,data经过JSON.stringify(_data)转为JSON字符串。

function saveTableFunc(tablename, _data){
    console.log(JSON.stringify(_data));
    $.ajax({
	url: '/Param/saveParametersJson',
	type: 'POST',
	data: JSON.stringify(_data),
	dataType: "json",							
	success: function(res){
	        table.reload(tablename);
		if(res.status==1 || res.status==2){		
			layer.msg(res.message,{time:1000,anim:0});
		}else{
			layer.msg("重复值或其它错误,不能保存",{icon:0});
		}
	}
    });
}

后端后台也显示有提交数据 

JFinal-4.8 action report -------- 2020-04-13 16:53:53 --------------------------
Url         : POST /Param/saveParametersJson
Controller  : com.pda.controller.ParametersController.(ParametersController.java:1)
Method      : saveParametersJson
Interceptor : com.jfinal.ext.interceptor.SessionInViewInterceptor.(SessionInViewInterceptor.java:1)
              com.pda.interceptor.LoginSessionInterceptor.(LoginSessionInterceptor.java:1)
              com.pda.interceptor.I18nCacheInterceptor.(I18nCacheInterceptor.java:1)
Parameter   : {"field1":"4","func":"currency","id":13,"value":"THDz"}=  
--------------------------------------------------------------------------------


评论区

JFinal

2020-04-13 17:06

parameter 这一样的 key 为 {...} , 注意后面有一个等号 "="

而等号后面是空值,证明你提交数据的方式并不是 http body 中传数据,仍然是表单提交

JFinal

2020-04-13 17:08

你需要的代码如下:
$.ajax({
type: "post",
url: "http://localhost/action",
contentType: 'application/json; charset=UTF-8', // 关键参数
dataType: 'json',
data: formToJsonString("表单id"),
success: function(ret) {
}
});

function formToJsonString(formId) {
var paramArray = $('#' + formId).serializeArray();
// 表单参数转 json 对象
var jsonObj = {};
$(paramArray).each(function() {
jsonObj[this.name] = this.value;
});

// json 对象转 json 字符串
return JSON.stringify(jsonObj);
}

其中的 contentType 为 'application/json; charset=UTF-8', 是最关键的参数。这些代码在你 jfinal club 项目的 jfinal-com-4.0.js 中都有

pandalam

2020-04-13 17:16

@波总,非常感谢。
你的是正解:contentType: 'application/json; charset=UTF-8', // 关键参数
增加后,后台打印没有了Parameter这一栏了。
弱弱地问一句,如果用getModel是否也需要增加这句?

JFinal

2020-04-13 17:22

@pandalam getModel、getBean 都是针对表单提交的,不需要这句

此外,要分清 contentType、 dataType 这两个参数的用途,前者是针对发送数据的,后者是针对返回数据的,很多人把后者当成是控制发送数据类型的,从而引发很多问题

JFinal

2020-04-13 17:26

@pandalam ajax 发请求的时候, contentType 还有一个用途是针对上传文件,我记得要设置为:
contentType : false

具体记不清了,这里提出来一下,以便于你将来使用 "ajax 上传文件" 功能时关注这个知识点

其实我本来是对前端的事情不感兴趣,不会关注的,但 jfinal 迭代 9 年,后端极速开发的问题早就解决完了

现在用 jfinal 开发项目 95% 的时间都花在前端上,这让我不得不着手解决前端的问题

jfinal 会为俱乐部会员提供一个用于二次开发的前端解决方案

pandalam

2020-04-16 16:18

@JFinal
如果用ajax去转送JSON的数组 到后台,后台如何读取?
前端打印如下:
0: {en: "SAVE", id: 1000, zh: "保存", LAY_TABLE_INDEX: 0}
1: {en: "LOGIN", id: 1001, zh: "登录", LAY_TABLE_INDEX: 1}
2: {en: "RESET", id: 1002, zh: "重置", LAY_TABLE_INDEX: 2}
3: {en: "LOGIN ID", id: 1003, zh: "登录名称/ID", LAY_TABLE_INDEX: 3}
4: {en: "PASSWORD", id: 1004, zh: "密码/PASSWORD", LAY_TABLE_INDEX: 4}
5: {id: 1005, zh: "收缩左侧导航栏", LAY_TABLE_INDEX: 5}

JFinal

2020-04-16 21:00

@pandalam 参数传到后端主要有三种格式:
1:key = value 这类表单数据或者 url 中问号挂参数据,这两种取值方法都是 getPara

2:在 http 的 body 中传输 String 文本,一般传送 json、xml 居多,可以通过 getRawData() 得到一个 String,然后用 FastJson.getJson().parse(...) 转换成 bean 或者 Map

3:上传文件用的 multipart request 格式, 用 getFile 获取

你可以针对上述类型来选择不同的接收方式。第一种方式会在控制台输出的 jfinal action reporter 的 parameter 这一栏中显示 key = value 数据,其它两种不会

JacksonFeng

2020-04-21 09:35

前端json参数,在后端controller action中的bean接收时,都为null.
version: 4.8 undertow:2.0

热门反馈

扫码入社