Почему java получает null из js?

Рейтинг: 0Ответов: 2Опубликовано: 13.04.2023

Есть 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"), и соответственно не может обработать данные, подскажите пожалуйста в чем ошибка и как ее решить.

Ответы

▲ 1Принят

Вопрос решен путем смены подхода к отправке данных с использованием 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() не знаю, главное что теперь все работает.

▲ 0

Возможно, ошибка в элементе form и он не находит элементы с таким name внутри себя, либо функция отрабатывает до заполнения элементов формы и все value равны null