name="cb1" id="a">
<input type="checkbox" name="cb1" id="b">
<input type="checkbox" name="cb1" id="c">
</form>
Я могу как-то получить данные без json?
Если да, то как прописать struct для принятия данных с формы?
Нихрена не понял
Допустим у меня есть селект с multiple <select name="id_cat" multiple id=""> <option value="1"> Кат а </option> <option value="2"> Кат б </option> <option value="3"> Кат в </option> <option value="9"> Кат з </option> </select> Я выбираю тут пункты, отправляю форму, на стороне сервера хочу получить данные из формы, а точнее список option
https://docs.rs/actix-web/3.3.2/actix_web/web/struct.Form.html для актикса это
по идее ты всегда можешь достать payload из post запроса и через serde распаковать его в свою структуру. даже если актикс не умеет в нужный тебе формат данных.
зачем если актикс 100% умеет в форм дата?
скажи конкретно какой запрос отправляется? А то лень фронт писать. Нажми в браузере кнопку и в F12 выбери copy as CURL на запросе и кинь сюда
{ "id_cat": [ "2", "9" ] }
struct Payload { pub id_cat: Vec<String> } ... pub async fn foo( body: web::Json<Payload>, ) -> HttpResponse { ... }
Ага. Вот так делал, а он выдаёт ошибку "Parse error" при попытке отправить запрос
покажи в браузере какой запрос уходит. Потому что жсон как ты скинул он распарсит
--data-raw "text="%"D0"%"A5"%"D1"%"8D"%"D0"%"BB"%"D0"%"BB"%"D0"%"BE"%"D1"%"83&id_cat=2&id_cat=9"
Ну тут нет жсона, передаётся через квери стринг
А можно чуть подробнее
короче, я потратил пару часов уже на этот вопрос) Ответ - нет стандарта для передачи массивов form data. Стандарт говорит только о передачи пар ключ-значение: https://www.w3.org/TR/2003/REC-xforms-20031014/slice11.html (см. 11.6 Serialization as application/x-www-form-urlencoded ) Позиция акткикса в том, что они соблюдают стандарт, если там чего-то не описано, то они реализовывать в самом фреймворке не будут. Но можно сделать это кастомно в стороннем крейте: тот же serde_qs имеет фичу актикса для парсинга из квери стринги. Если тебя это устроит (вместо тела) то ок. Но я бы на твоем месте делал XHR и не парил мозг)
Спасибо большое!
Обсуждают сегодня