我有一个管理员用来修改用户详细信息的表单,在提交之前我想将数据结构(平面数组)修改为具有某种层次结构的json对象。
User = { username: 'myUserName' , roles : [ {role : 'ADMIN'},{role: USER} ], etc..}
所以要在我的客户网页上执行此操作,我已经完成了此操作:
$("#submitUpdate").click(function() {
var dataAsJson = JSON.stringify(function(){
//user
var o = {};
//spring token
var tk = {};
//var usrname
var un={};
var formData = $("#updateForm").serializeArray();
$.each(formData, function(k, v) {
if (o[v.name] !== undefined) {
if (!o[v.name].push) {
o[v.name] = [ o[v.name] ];
}
o[v.name].push(v.value || '');
} else {
if (v.name === 'userRoles') {
if (v.value !== undefined) {
var a = [];
$.each(v.value.split(','), function(i, rl) {
var r = {};
r.role = rl;
a.push(r);
});
o[v.name] = a;
} else
o[v.name] = [];
} else if (v.name === '_csrf') {
tk[v.name] = v.value;
} else if (v.name === '_username') {
un[v.name] = v.value || '';
} else
o[v.name] = v.value || '';
}
});
var obj = [];
obj.push(tk); obj.push(un); obj.push(o);
return obj;
}());
$("#updateForm").ajaxSubmit({
url : "${userUpdateCtx}",
data: dataAsJson,
beforeSubmit : function(formData, jqForm, options) {
},
success : function(msg) {
$table.bootstrapTable('refresh');
},
error : function(e) {
showError(e);
}
});
});
问题是for永远不会被提交,我得到 ERROR 400
HTTP Status 400 -
Type Report Status
message
Description request sent by the client was syntactically incorrect.
我已尝试将处理代码放在beforeSubmit
内并返回字符串JSON.stringify(obj)
,但这似乎也不起作用。
我怎么能做到这一点?。
修改
感谢下面的评论我修复了dataAsJson
但仍然有相同的错误,请求的转储看起来像这样(切断它太久):
URL de la requête : http://localhost:8080/WebMarket/admin/users/update?_csrf=9323a5ac-9a49-436f-a799-89b4814fb309&enabled=1&firstName=Steve&lastName=Jobs&_username=manager&username=manager&password=%242a%2410%24BVRCqPA6.qdvs%2Fma0uH6Here4ozKudoHyH2OFz2xc3.FfwL%2FEyXz6&userRoles=ROLE_MANAGER&0=%5B&1=%7B&2=%22&3=_&4=c&5=s&6=r&7=f&8=%22&9=%3A&10=%22&11=9&12=3&13=2&14=3&15=a&16=5&17=a&18=c&19=-&20=9&21=a&22=4&23=
Méthode de la requête : POST
Code d'état : HTTP/1.1 400 BAD REQUEST