Почему java получает null из js?
Есть JavaScript-функция которая пересылает данные формы в Java Servlet.
JavaScript:
function getAnswer(obj){
let form = document.getElementById(obj.id).parentElement;
let data = {
qId: form.elements['qId'].value,
qTypeId: form.elements['qTypeId'].value,
chanses: []
}
if (data.qTypeId==1||data.qTypeId==2) {
let chanses = form.elements['chans'];
for (let i = 0; i < chanses.length; i++) {
if (chanses[i].checked) {
data.chanses.push(chanses[i].value);
}
}
} else if(data.qTypeId==3){
let chans = form.elements['chans'];
data.chanses.push(chans.value);
}
let formData = new FormData();
formData.append("data", JSON.stringify(data));
fetch('setAnswer', {
method: 'POST',
body: formData
}).then(response=>{
console.log(data)
}).catch(error=>{
console.error(error)
});
}
Java:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String jsonData = req.getParameter("data");
System.out.println(jsonData);
if (jsonData!=null && !jsonData.isEmpty()) {
JSONObject jsonObject = new JSONObject(jsonData);
System.out.println(jsonObject);
}
} catch (Exception e){
System.out.println(e.toString());
}
}
В итоге Java получает null из req.getParameter("data"), и соответственно не может обработать данные, подскажите пожалуйста в чем ошибка и как ее решить.
Ответы (2 шт):
Автор решения: klekovvlad
→ Ссылка
Возможно, ошибка в элементе form и он не находит элементы с таким name внутри себя, либо функция отрабатывает до заполнения элементов формы и все value равны null
Автор решения: danmas
→ Ссылка
Вопрос решен путем смены подхода к отправке данных с использованием JQuery $.ajax. Теперь данные отправляются нормально.
JS:
function getAnswer(obj){
let form = document.getElementById(obj.id).parentElement
let data={
qId: form.elements['qId'].value,
qTypeId: form.elements['qTypeId'].value,
chanses: []
}
if (data.qTypeId==1||data.qTypeId==2) {
let chanses = form.elements['chans'];
for (let i = 0; i < chanses.length; i++) {
if (chanses[i].checked) {
data.chanses.push(chanses[i].value);
}
}
} else if(data.qTypeId==3){
let chans = form.elements['chans'];
data.chanses.push(chans.value);
}
$.ajax({
method: 'POST',
url: "setAnswer",
data: {
data: JSON.stringify(data)
}
});
}
Почему была проблема с fetch() не знаю, главное что теперь все работает.