Проблемы при передаче параметров через метод put с использованием fetch - PullRequest
0 голосов
/ 09 марта 2019

У меня возникают проблемы при попытке передать параметры методом put с помощью fetch

. Для этого я пытаюсь выполнить следующее

fetch(`brands/${id}`, {
    method: 'PUT',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({name: 'dummy text'})
})
    .then(response => response.json())
    .then(json => {
        if (json.status === 'ok') {
            // do some relevant logic

            return false;
        }

        showErrors(json.errors);
    })
    .catch(error => console.error(error.message));

Я также пытаюсь использовать интерфейс FormData

const formData = new FormData();

formData.append('name', 'some dummy text');

fetch(`brands/${id}`, {
    method: 'PUT',
    body: formData
})
    .then(response => response.json())
    .then(json => {
        if (json.status === 'ok') {
            // Some relevant logic

            return false;
        }

        showErrors(json.errors);
    })
    .catch(error => console.error(error.message));

Но я получаю тот же результат (параметр name отсутствует в контроллере)

Осмотрена вкладка сети. Я вижу, что был вызван ajax, и на вкладке params я вижу, чтопеременные передаются.Но при попытке доступа к этим параметрам из контроллера они не отображаются.

Я ценю вашу помощь

enter image description here

В бэкэнде при печатипараметры, полученные в этом запросе, параметр name не указан.

В бэкенде соответствующими частями в определении контроллера являются следующие

Метод обновления может быть вызван только через метод put

static allowedMethods = [
    save: 'POST',
    update: 'PUT'
]

Здесь я надеюсь, что параметр name имеет значение, но параметр не существует

def update() {
    try {
        Brand brand = brandService.update(params.id, params.name)

        render(contentType: 'application/json') {
            [status: 'ok', brand: brand]
        }
    } catch(ValidationException e) {
        render(contentType: 'application/json') {
            [status: 'fail', errors: e.errors]
        }
    }
}

1 Ответ

0 голосов
/ 09 марта 2019

Выполнение вашей формы через этого маленького помощника может помочь:

form2Obj(form) {
    const obj = {};
    new FormData(form).forEach((val, key) => obj[key] = val);
    return obj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...