最近在写一个富文本框的后台数据服务的时候遇到一些关于 ajax 提交与 表单提交的比较特殊的案例,这里拿来跟大家分享,希望能让大家有所启发。
1. 首先是常见表单提交在SpringMVC的控制器中的代码情况:
@Controller public class MaterialController {
@Autowired
MaterialService materialService;
@RequestMapping(value="/addArticle",method=RequestMethod.POST) public String saveArticle(AddArticleVO addArticleVO){ materialService.saveArticle(addArticleVO); return "redirect:/articleList.html"; }
}
做过SpringMVC的应该都比较熟悉这样的代码,我这里想重点突出的是,在前端以表单提交的方式将数据过来后是没办法控制其下一个页面的跳转的,后台在不使用 jsp或velocity 这类引擎的时候,可采取上面的方式为该服务重定向一个新的html页面。另外需要注意的是,切忌给该方法加上@ResponseBody的注释,否则前端只会打印出重定向这条字条串指令。
2. 前端 ajax 提交数据到后台:
@Controller
public class MaterialController {
@Autowired
MaterialService materialService;
@RequestMapping(value="/addImg",method=RequestMethod.POST) @ResponseBody public void saveImg(@RequestBody AddImgVO addImgVO){ materialService.saveImg(addImgVO); }
}
首先 @RequestBody 注解是一定要加的,否则这个服务没办法获取到前台提交过来的任何数据。其次是@ResponseBody 注解,因为这里在图片信息保存完毕之后是不主动再向前端提供任何数据的,如果不加这个注解会导致前端的这个 ajax 请求始终无法成功执行完,如果该请求带有数据提交完毕页面跳转之类的响应事件,那么将永远没办法触发,页面会一直卡在数据提交那个表单页面,就好像一直在等待后台给它一个反馈一样。