@Sashjkeee
f-e

Строка вместо объекта?

Подскажите еще такой вопрос

Есть такой вот код
'formData.brand'(val) {
    let payload = {
        names: arr,
        values: {
            "brand": val
        }
    }
    if (!val) return;
        axios.get('../../../json/v1/form/kasko/dependencies', {
            params: payload
        }).then(response => {
            this.$set(this.dependentData, 'brand', {
                model: response.data.models,
                country: response.data.city
            });
        }).catch(errors => {
            console.error(errors);
        });
}

в values передаю объект
но, как я понял, на бек приходит не объект, а строка

5b4dede40fdc5862491098.png

Как это исправить? Почему так получается?
  • Вопрос задан
  • 965 просмотров
Решения вопроса 4
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
На бэк не придет объект. По http можно передавать только строки. Вы можете передать json строку, и там, на сервере, сделать из нее объект при помощи json_decode (в php)
Ответ написан
Потому что надо отправлять POST. GET складывает под массивы в json.
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Потому что параметры это строки, и твой сложный объект преобразуется в строку. И результат будет не тот, который ожидаешь ты, а тот, который может принять http сервер. Тебе надо самостоятельно преобразовать свой объект в json строку, и уже ее передавать на сервер.

axios.get('../../../json/v1/form/kasko/dependencies', {
  params: {
    data: JSON.stringify(payload)
  }
})
Ответ написан
markmariner
@markmariner
В текущей проблема дело в принципах работы HTTP-протокола при отправке запроса методом GET. В GET-запросе нет тела запроса, а есть только URI-строка, то, что мы в обиходе называем Адресом. Все параметры запроса, которые вы передаёте, присоединятся к адресу ресурса, к которому вы обращаетесь после знака ?, например так:

http://domain.com/get-data?param1=abc&param2=def

Так как URI — это строка, то и все данные, представленные в других типах, будут преобразованы в строку по правилам кодирования URI, в вашем примере это сделает AXIOS. Соответственно бекэндеру нужно принять эту строку и преобразовать в объект, я уверен, что для этого есть стандартная конструкция в любом языке.

Если бы это был POST-запрос, или любой другой запрос с телом, то в теле бы всё равно передавали объект в формате JSON: сегодня это такой профессиональный стандарт. Наверно, можно было бы придумать свой бинарный формат передачи именно объектов, но не очень понятно, зачем.

Возвращаясь к вашему дополнительному вопросу про то, как объяснить это бекэндеру: предложить ему книгу по компьютерным сетям и протоколам. Несколько удивительно, что он может работать без этих знаний.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы