Задать вопрос
@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

Как это исправить? Почему так получается?
  • Вопрос задан
  • 1035 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 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: сегодня это такой профессиональный стандарт. Наверно, можно было бы придумать свой бинарный формат передачи именно объектов, но не очень понятно, зачем.

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

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
22 янв. 2025, в 04:08
6000 руб./за проект
21 янв. 2025, в 23:55
20000 руб./за проект
21 янв. 2025, в 23:35
80000 руб./за проект