刚才在用的 springmvc + ajax 实现点赞功能不刷新更新数据的时候,ajax 返回一直是 error。
经过百度后,发现原因是 dataType 和实际返回值类型不一致。
article.jsp 代码
控制器代码如下(忽略可重复点击)
注意:这里要一定加 @ResponseBody ,如果返回字符串,会认为是路径,而不是值。
如果 dataType: "json"
控制器里就需要将对象转成 JSON 字符串了,可以使用阿里的 fastjson
本文链接:https://liuyanzhao.com/6169.html
经过百度后,发现原因是 dataType 和实际返回值类型不一致。
String dataType
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。在1.4中,JSON就会生成一个JavaScript对象,而script则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
本例代码如下
article.jsp 代码
- <script type="text/javascript">
- function like() {
- document.cookie="articleId=${articleCustom.articleId};path=/";
- $.ajax({
- async: false,
- type:"POST",
- url:"${pageContext.request.contextPath}/like",
- data: {count:${articleCustom.articleLikeCount}},
- dataType:"text",
- success:function (data) {
- $(".count").html(data);
- // alert("点赞成功");
- },
- error:function()
- {
- alert("获取数据出错!");
- },
- });
- }
- </script>
- <a href="javascript:;"onclick="like()">
- <i class="fa fa-thumbs-up"></i>赞
- <i class="count">${articleCustom.articleLikeCount}</i>
- </a>
控制器代码如下(忽略可重复点击)
- //点赞
- @RequestMapping(value = "/like",method = {RequestMethod.POST})
- @ResponseBody
- public Integer testCookie(@CookieValue(value="articleId",required=false) Integer articleId) throws Exception {
- System.out.println(articleId+","+age);
- ArticleCustom articleCustom = articleService.getArticleById(articleId);
- int articleCount = articleCustom.getArticleLikeCount();
- articleCustom.setArticleLikeCount(articleCount + 1);
- articleService.updateArticle(articleId, articleCustom);
- return articleCount+1;
- }
注意:这里要一定加 @ResponseBody ,如果返回字符串,会认为是路径,而不是值。
如果 dataType: "json"
控制器里就需要将对象转成 JSON 字符串了,可以使用阿里的 fastjson
- /**
- * 删除单个用户
- *
- * @param id
- * @return
- */
- @RequestMapping(value = "/delete")
- @ResponseBody
- public String deleteUser(@RequestParam("id") Integer id) throws Exception {
- ResultVO resultVO = new ResultVO();
- User user = userService.findUserById(id);
- //如果用户存在
- if (user != null) {
- userService.deleteUser(id);
- resultVO.setCode("success");
- } else {
- //如果用户不存在
- throw new ParameterException(ResultEnum.USER_NOT_EXIST.getMsg());
- }
- return JSON.toJSONString(resultVO);
- }
本文链接:https://liuyanzhao.com/6169.html
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏