我正在使用Spring Boot,有一点我不明白。
假设我有一个model
,在Controller的方法中创建,注释为@ResponseBody
注释。
我必须在这个模型中放入2个变量,一个String和一个int,我必须用它来在js文件中设置2个全局变量;如果ajax功能成功,则完成此设置。
所以,为简单起见,我们假设我的全局变量是global1
和global2
;并且放在模型中的变量是String a
和int b
;在这种情况下,必须发生的是:
$.ajax({
...<url, method and other actions here>...
success: function(){
global1 = String a;
global2 = int b;
}
我怀疑是3:
如何将变量String a
和int b
放入模型中?我应该使用model.addObject()
还是最好创建一个Modelmap
对象,请使用a
和b
填充此对象,然后将其放入模型中?这两种方法之间存在哪些差异?
在ajax函数中,当我有success: function()
时,我应该将哪些参数输入到function()
?
在成功函数内部,如何使用模型数据设置全局变量?我可以使用什么语法来执行此操作?换句话说,当我拥有我的模型时,如何访问其变量并用于执行global1 = String a
和global2 = int b
?
答案 0 :(得分:1)
您可以使用Model
对象并使用addAttribute
方法为ajax成功函数中需要的每个对象。在每个Spring方法中,您都可以添加Model
对象,例如:
@RequestMapping(value="value", method = RequestMethod.POST)
public @ResponseBody String yourMethod(@RequestParam(value="yourParam") String yourParam,
Model model){
String a = "Your String";
int b = 456;
model.addAttribute("myString", a);
model.addAttribute("myInt", b);
return "";
}
必须使用一个参数声明成功函数,即响应。在此参数中,您将找到在模型对象(myString
和myInt
)中添加的参数:
success: function(response){
// response.myString will be "Your String"
// response.myInt will be 456
}
答案 1 :(得分:1)
一般:干净的方法是在AJAX的数据中使用$("form").serialize();
param1=param1value¶m2=param2value
并使用@ModelAttribute className className
收回,但在编辑中你可能有很多问题,如checkBox或日期或单选按钮自动值检测,所以我建议你使用spring form后端并传回end对象并删除Ajax如果你能够!同样使用@ResponseBody你应该在客户端制作json对象并进入服务器这样的@RequestBody className className
,我认为json方法在客户端花费太多时间进行开发,特别是在Ajax客户端的Spring没有任何能力,所以对于Ajax,我更喜欢使用thymleaf片段加载而不是jquery AJAX,在这种方法中你甚至可以使用Thymleaf对象返回命令地形。
但你的问题1 - 如果你发送json使用@RequestBody并得到这样的模型:
@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity<Car> update(@RequestBody Car car) {
...
}
@ResponseBody只支持jackson自动后备对象所以你应该只发送回来的对象,但是你可以使用Response Entity发回ajax方法的状态,它是html的数据和状态在int中的包装器:
return new ResponseEntity<Car>(car, HttpStatus.OK);
或
return new ResponseEntity("done", HttpStatus.OK);
2 - 如果使用jquery完成功能将获得200 201和其他成功值
完成后你可以获得数据.done(function(data) {
alert( "$.get succeeded" ); });
3-一般来说,数据是你应该预约的json列表,并将每个项目作为json对象并按点开item.prop