ajax使用来json格式
<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格式:
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(userMap));
response.getWriter().print(jsonObject);
如果不想使用json格式的话,可以改成
dataType: "text",
<!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 'POST' not supported</p><p><b>描述</b> 请求行中接收的方法由源服务器知道,但目标资源不支持</p><hr class="line" /><h3>Apache Tomcat/9.0.14</h3></body></html>
日志控制台日志:
[org.springframework.web.servlet.PageNotFound] - Request method 'POST' not supported
原来我的ajax指定了post方法,
type: "post",
但是我这里RequestMapping没有指定method = RequestMethod.POST
RequestMapping没有指定的话,是根据前端自适应的,但是前端指定了,requestMapping也一定要指定。我猜的。
解决:
1.ajax去掉 type: "post",
2.RequestMapping加上method = RequestMethod.POST
??????????
,而且只有中文会这样。@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);
}
}
中文变成了问号。
加上下面这个即可
@RequestMapping(produces = "application/json; charset=utf-8")
或者直接加上@ResponseBody就可以了,使用了注解@responseBody就是返回值是json数据
@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);
}
}