Данные формы не преобразуют поле number inptu в строку

#javascript #html #json #form-data

Вопрос:

У меня есть серверная часть REST и интерфейс HTML. Я использую формы на интерфейсе для отправки запросов на серверную часть. Для этого я использую FormData для преобразования объекта формы в объект JSON, который я могу отправить на серверную часть REST.

Вот форма

 <form id="form">
    <label for="string">string:</label><br>
    <input type="text" id="string" name="string" value="string"><br>
    <label for="number">number:</label><br>
    <input type="number" id="number" name="number" value="12"><br><br>
    <input type="submit" value="Submit">
</form> 
 

И это функция, которую я использую для преобразования формы в объект json:

 window.onload = function(){
    const form = document.getElementById('form')
    form.onsubmit=send
}

function send(e){

    e.preventDefault()

    var data=new FormData(e.target)
    data=Object.fromEntries(data)
    console.log(data)


}
 

К сожалению, FormData преобразует числовые входные данные в строки, но серверная часть ожидает фактические числа. Я знаю, что мог бы просто преобразовать их обратно в числа вручную для каждого поля формы, но это не единственная форма в приложении, и я хотел бы иметь возможность повторно использовать один и тот же код для отправки в разные конечные точки.

 {
  "string": "string",
  "number": "12"
}
 

Итак, есть ли способ заставить FormData не преобразовывать числа в строку, альтернатива FormData или способ автоматического преобразования строк в числа, если исходный ввод был вводом числа?

Ответ №1:

На самом деле вы не можете отправлять целые числа, все будет в строковом формате и в парах ключ-значение, когда вы используете FormData. Кроме того, вы можете преобразовать их в требуемый тип данных в бэкэнде.Узнайте больше о FormData здесь

Комментарии:

1. почти уверен, что вы можете отправить JSON, содержащий числа, через Http Json, вы просто не можете отправлять целые числа, я только что проверил это

2. да, вы можете просто отправить данные в строковом формате JSON на сервер и преобразовать их в целое число на стороне сервера.

3. Я смог отправить целое значение на сервер, а затем оно поступило на сервер в виде целого значения. Я не знаю, что вы подразумеваете под «вы на самом деле не можете отправлять целые числа». Я имею в виду, что в какой-то момент он преобразуется, но это работает, поэтому я хочу воспользоваться этим