前端js:
function saveToDB(json){
alert("saveToDB");
console.log(json);
axios
.post('jsp/test.jsp', {data1:'json',data2:'text'})
.then(function(response){
console.log(response.data);
})
.catch(function (error) { // 请求失败处理
console.log(error);
});
}
后端jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%=request.getParameter("data1")%>
预期是打印出字符json,但是结果是null,在ff中看,前端参数是被传递过去了的,但为啥jsp获取不到参数呢?
axios.post默认Content-Type为application/json,request.getParameter获取的是键值对,应该设置请求头content-type为application/x-www-form-urlencoded,设置为这个头后,注意传递的data数据要自己组合为键值对字符串或者使用URLSearchParams对象来添加数据
还有题主如果要传递json参数对象,要注意用JSON.stringify转对象为字符串才行
改为下面的代码就没问题了,有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~
function saveToDB(json) {
alert("saveToDB");
console.log(json);
var data = new URLSearchParams();
data.append('data1', JSON.stringify(json));
data.append('data2', 'text');
//var data = 'data1=' + encodeURIComponent(JSON.stringify(json)) +'&data2=text'//或者用此方式
axios.post('x.aspx', data, { headers: { 'content-type': 'application/x-www-form-urlencoded' } })
.then(function (response) {
console.log(response.data);
})
.catch(function (error) { // 请求失败处理
console.log(error);
});
}
在post加个参数,说明提交的是json格式数据