ajax一直返回 error

avatar 2017年09月02日23:34:15 0 2522 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
刚才在用的 springmvc + ajax 实现点赞功能不刷新更新数据的时候,ajax 返回一直是 error。

经过百度后,发现原因是 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 代码
  1. <script type="text/javascript">
  2.     function like() {
  3.         document.cookie="articleId=${articleCustom.articleId};path=/";
  4.         $.ajax({
  5.             async: false,
  6.             type:"POST",
  7.             url:"${pageContext.request.contextPath}/like",
  8.             data: {count:${articleCustom.articleLikeCount}},
  9.             dataType:"text",
  10.             success:function (data) {
  11.                 $(".count").html(data);
  12.                // alert("点赞成功");
  13.             },
  14.             error:function()
  15.             {
  16.                 alert("获取数据出错!");
  17.             },
  18.         });
  19.      }
  20. </script>
  21.  <a href="javascript:;"onclick="like()">
  22.      <i class="fa fa-thumbs-up"></i>
  23.      <i class="count">${articleCustom.articleLikeCount}</i>
  24.  </a>

控制器代码如下(忽略可重复点击)
  1. //点赞
  2. @RequestMapping(value = "/like",method = {RequestMethod.POST})
  3. @ResponseBody  
  4.     public Integer testCookie(@CookieValue(value="articleId",required=false) Integer articleId) throws Exception {
  5.     System.out.println(articleId+","+age);
  6.         ArticleCustom articleCustom = articleService.getArticleById(articleId);
  7.         int articleCount = articleCustom.getArticleLikeCount();
  8.         articleCustom.setArticleLikeCount(articleCount + 1);
  9.         articleService.updateArticle(articleId, articleCustom);
  10.         return articleCount+1;
  11. }

注意:这里要一定加 @ResponseBody  ,如果返回字符串,会认为是路径,而不是值。



如果 dataType: "json"

控制器里就需要将对象转成 JSON 字符串了,可以使用阿里的 fastjson
  1. /**
  2.      * 删除单个用户
  3.      *
  4.      * @param id
  5.      * @return
  6.      */
  7.     @RequestMapping(value = "/delete")
  8.     @ResponseBody
  9.     public String deleteUser(@RequestParam("id") Integer id) throws Exception {
  10.         ResultVO resultVO = new ResultVO();
  11.         User user = userService.findUserById(id);
  12.         //如果用户存在
  13.         if (user != null) {
  14.             userService.deleteUser(id);
  15.             resultVO.setCode("success");
  16.         } else {
  17.             //如果用户不存在
  18.             throw new ParameterException(ResultEnum.USER_NOT_EXIST.getMsg());
  19.         }
  20.         return JSON.toJSONString(resultVO);  
  21.     }







 

本文链接:https://liuyanzhao.com/6169.html
  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0