easyui怎样修改datagrid的content-type

如题所述

spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合。
JS代码:
[javascript] view plain copy
var userList = new Array();
userList.push({name: "李四",pwd: "123"});
userList.push({name: "张三",pwd: "332"});
$.ajax({
type: "POST",
url: "/catalog/saveUsers",
data: JSON.stringify(userList),//将对象序列化成JSON字符串
dataType:"json",
contentType : 'application/json;charset=utf-8', //设置请求头信息
success: function(data){
…
},
error: function(res){
…
}
});
Java代码:
[java] view plain copy
@Controller
<pre name="code" class="java">@RequestMapping("/catalog.do")
public class CatalogController {
@RequestMapping(params = "fn=saveUsers")
@ResponseBody
public AjaxJson saveUsers(@RequestBody List<User> userList) {
…
}
}
如果想要接收User[]数组,只需要把saveUsers的参数类型改为@RequestBody User[] userArray就行了。
使用$.ajax()是完全可以通过的,但是在EasyUI里怎么修改datagrid的content-type呢?
查找api也找不到相关的属性可以设置,翻看easyUI的源代码时找到loader的源代码:
[javascript] view plain copy
loader: function(_629, _62a, _62b) {
var opts = $(this).datagrid("options");
if(!opts.url) {
return false;
}
$.ajax({
type: opts.method,
url: opts.url,
data: _629,
dataType: "json",
contentType: opts.contentType?opts.contentType:"text/html",
success: function(data) {
_62a(data);
},
error: function() {
_62b.apply(this, arguments);
}
});
}
这里看到loader里没有提供修改content-type的选项,这时候就需要我们自己写loader了。JS代码如下:
[javascript] view plain copy
$("#grid").datagrid({
loader : function(param, success, error) {
$.ajax({
type : opts.method,
url : opts.url,
dataType : 'json',
contentType : 'application/json;charset=utf-8', // 设置请求头信息
data : JSON.stringify(param),
success : function(result) {
success(data);
}
});
}
});
好了,现在在提交的时候。content-type是application/json;charset=utf-8。
温馨提示:答案为网友推荐,仅供参考
相似回答