前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ajax请求后后,response有数据,但是进入error方法

ajax请求后后,response有数据,但是进入error方法

作者头像
HaC
发布2020-12-30 17:30:14
发布2020-12-30 17:30:14
1.4K00
代码可运行
举报
文章被收录于专栏:HaC的技术专栏HaC的技术专栏
运行总次数:0
代码可运行
  1. 格式问题,前端用ajax请求java后台,已经返回数据。但是进入的是error方法。报200 一般是这种情况

ajax使用来json格式

代码语言:javascript
代码运行次数:0
运行
复制
   <script>
        $("#login").click(function(){
            alert("进入方法成功");
            var url="/ajaxText/info";
            $.ajax({
                type: "post",
                url: url,
                data: {"para":34765},
                cache: false,
                async : false,
                dataType: "json",
                success: function (data)
                {
                    console.log("异步调用返回成功,result:"+data);
                    console.log("result的map值:"+data["cardStatus"]);
    				alert(data["bankName"])
                },
                error:function (XMLHttpRequest) {
                    alert("请求失败!");
                }
            });
        });
    </script>

但是后台返回只是text格式,需要转json格式:

代码语言:javascript
代码运行次数:0
运行
复制
 JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(userMap));
 response.getWriter().print(jsonObject);

如果不想使用json格式的话,可以改成

代码语言:javascript
代码运行次数:0
运行
复制
    dataType: "text",
  1. 还有一种情况response是报405的
代码语言:javascript
代码运行次数:0
运行
复制
    <!doctype html><html lang="zh"><head><title>HTTP Status 405 – Method Not Allowed</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 405 – Method Not Allowed</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>消息</b> Request method &#39;POST&#39; not supported</p><p><b>描述</b> 请求行中接收的方法由源服务器知道,但目标资源不支持</p><hr class="line" /><h3>Apache Tomcat/9.0.14</h3></body></html>

日志控制台日志:

代码语言:javascript
代码运行次数:0
运行
复制
[org.springframework.web.servlet.PageNotFound] - Request method 'POST' not supported

原来我的ajax指定了post方法,

代码语言:javascript
代码运行次数:0
运行
复制
  type: "post",

但是我这里RequestMapping没有指定method = RequestMethod.POST RequestMapping没有指定的话,是根据前端自适应的,但是前端指定了,requestMapping也一定要指定。我猜的。 解决: 1.ajax去掉 type: "post", 2.RequestMapping加上method = RequestMethod.POST

  1. 还遇到过后台日志打印json返回值返回值正确,但是前端显示??????????,而且只有中文会这样。
代码语言:javascript
代码运行次数:0
运行
复制
@Controller
@RequestMapping(value = "ajaxText")
public class AjaxTextController {
    private static Logger log = Logger.getLogger(PersonController.class);
    @Autowired
    private PersonService personService;
    @RequestMapping(value = "info")
    public void selectPerson(HttpServletRequest request, HttpServletResponse response) throws IOException {
        long userId=Long.parseLong(request.getParameter("para"));
        log.info("打印para的参数值"+userId);
        Map<String,String> userMap =personService.queryUserByid(userId);
        Map<String,Object> result = new HashMap<String,Object>();
        result.put("userMap", userMap);
        JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(userMap));
        log.info(jsonObject);
        response.setCharacterEncoding("utf-8");
        response.getWriter().print(jsonObject);
    }
}

中文变成了问号。

加上下面这个即可

代码语言:javascript
代码运行次数:0
运行
复制
@RequestMapping(produces = "application/json; charset=utf-8") 

或者直接加上@ResponseBody就可以了,使用了注解@responseBody就是返回值是json数据

代码语言:javascript
代码运行次数:0
运行
复制
@Controller
@RequestMapping(value = "ajaxText")
@ResponseBody
public class AjaxTextController {
    private static Logger log = Logger.getLogger(PersonController.class);
    @Autowired
    private PersonService personService;
    @RequestMapping(value = "info")
    public void selectPerson(HttpServletRequest request, HttpServletResponse response) throws IOException {
        long userId=Long.parseLong(request.getParameter("para"));
        log.info("打印para的参数值"+userId);
        Map<String,String> userMap =personService.queryUserByid(userId);
        Map<String,Object> result = new HashMap<String,Object>();
        result.put("userMap", userMap);
        JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(userMap));
        log.info(jsonObject);
        response.setCharacterEncoding("utf-8");
        response.getWriter().print(jsonObject);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/02/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档