Как с помощью HTML и JavaScript сохранить выбор пользователя и передать эти значения в качестве входного параметра?

Я создаю настраиваемую веб-страницу, которая содержит список флажков, позволяющих пользователю выбрать язык (языки) для перевода текста. Проблема, с которой я столкнулся, заключается в том, как я могу сохранить язык (и), выбранный пользователем, и передать его в качестве входных данных в моем запросе приложения логики Azure?


person Peter    schedule 16.04.2020    source источник
comment
как бы вы хотели передать его в строке запроса? через запятую, массив, все нормально ...?   -  person Diogo Lessa    schedule 16.04.2020
comment
Возможно, вам придется отправить несколько запросов для каждого языка, глядя на API.   -  person Shivashriganesh Mahato    schedule 16.04.2020
comment
Вы можете сохранить выбор в localstorage или indexdb перед отправкой. Кроме того, как указывает @Mahato, вам нужно несколько запросов для каждого языка, выбранного пользователем.   -  person Abrar Hossain    schedule 16.04.2020
comment
@DiogoLessa как отправка JSON в приложения логики. Получите HTML-форму для отправки тела JSON. Примерно так: {language: english}   -  person Peter    schedule 16.04.2020
comment
@ShivashriganeshMahato Я имею в виду, можем ли мы сделать это без использования API?   -  person Peter    schedule 16.04.2020


Ответы (1)


Это может зависеть от ваших потребностей. Однако простой способ сделать это - использовать ресурсы HTML по умолчанию и использовать как можно меньше JavaScript:

HTML:

<form id="form-id">
  <ul>
    <li><label><input type="checkbox" name="language" value="english"> English</label></li>
    <li><label><input type="checkbox" name="language" value="spanish"> Spanish</label></li>
    <li><label><input type="checkbox" name="language" value="vietnamese"> Vietnamese</label></li>
    <li><label><input type="checkbox" name="language" value="somali"> Somali</label></li>
    <li><label><input type="checkbox" name="language" value="chinese"> Chinese</label></li>
    <li><label><input type="checkbox" name="language" value="amharic"> Amharic</label></li>
    <li><label><input type="checkbox" name="language" value="korean"> Korean</label></li>
    <li><label><input type="checkbox" name="language" value="russian"> Russian</label></li>
    <li><label><input type="checkbox" name="language" value="tagalog"> Tagalog</label></li>
    <li><label><input type="checkbox" name="language" value="arabic"> Arabic</label></li>
    <li><label><input type="checkbox" name="language" value="khmer"> Khmer</label></li>
    <li><label><input type="checkbox" name="language" value="thai"> Thai</label></li>
    <li><label><input type="checkbox" name="language" value="lao"> Lao</label></li>
    <li><label><input type="checkbox" name="language" value="japanese"> Japanese</label></li>
    <li><label><input type="checkbox" name="language" value="deutsch"> Deutsch</label></li>
  </ul>
  <button type="submit">Submit</button>
</form>

Javascript:

const form = document.getElementById('form-id')

form.addEventListener('submit', ev => {
  ev.preventDefault()

  const formData = new FormData(document.getElementById('form-id'));  
  const url = 'https://api.videoindexer.ai/location/Accounts/accountId/Videos/videoId/Index'
  fetch(url, {
    method: 'POST',
    body: formData
  })
})

Если вы попытаетесь отправить и проверить свою консоль браузера, вы увидите, что он пытается отправить правильно: введите описание изображения здесь

Теперь остается только решить эту проблему на стороне сервера.

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

const checkedOptions = []
document.querySelectorAll('input[name="language"]').forEach(item => {
  if(item.checked) {
    checkedOptions.push(item.value)
  }
})

Все выбранные данные будут внутри этого массива, и вы можете использовать такие методы, как .join(), чтобы объединить их в своем URL-адресе.

РЕДАКТИРОВАТЬ:

Если вам нужно отправить данные с помощью метода GET, вы можете следовать этому в качестве примера:

const form = document.getElementById('form-id')

form.addEventListener('submit', ev => {
  ev.preventDefault()

  const formData = new FormData(document.getElementById('form-id'));
  const languages = new URLSearchParams(formData).toString()
  const reTranslate = 'someValue'
  const anotherValue = 'anotherValue'
  const url = `https://api.videoindexer.ai/location/Accounts/accountId/Videos/videoId/Index?${languages}&reTranslate=${reTranslate}&anotherValue=${anotherValue}`

  console.log(url)
  // output: https://api.videoindexer.ai/location/Accounts/accountId/Videos/videoId/Index?language=khmer&language=lao&reTranslate=someValue&anotherValue=anotherValue
  fetch(url, { method: 'GET '})

})

Но я чувствую, что сначала вам нужно понять пару вещей:

  1. Разница между POST и GET;
  2. Как отправлять данные на сервер (используя fetch api, axios, запрос xhr и т. Д.) И обрабатывать ответ от сервера;
  3. Узнайте, какой контракт API ожидает от вас

Ваше здоровье,

person Diogo Lessa    schedule 16.04.2020
comment
Спасибо, Диаго. Я пройду через это. Кроме того, я обновил свой вопрос выше, добавив рабочий процесс моего приложения логики, чтобы дать представление. - person Peter; 16.04.2020
comment
У меня есть быстрый вопрос. Почему значение const url отключено, оно неполное. У вас это api.videoindexer.ai/location/Accounts/accountId/Videos/videoId/…. Думаю, это должен быть api.videoindexer.ai {location} / Accounts / {accountId} / Videos / {videoId} / Index [? Language] [& reTranslate] [& includeStreamingUrls] [& accessToken]. Я ошибся? - person Peter; 16.04.2020
comment
Что ж, это зависит от того, чего ожидает API. Если он ожидает POST, то я правильно сделал, и вам нужно заполнить все эти данные внутри тела (formData). Если он ожидает GET, то то, что вы сказали, является правильным. Я обновил пример опцией GET. - person Diogo Lessa; 16.04.2020
comment
Спасибо, Диого, API ожидает POST. - person Peter; 16.04.2020
comment
Поскольку приложение логики запускается по протоколу HTTP, настраиваемая веб-страница может просто правильно направить запрос к этой конечной точке? - person Peter; 16.04.2020
comment
Да, но это уже другая тема. Говорить о HTTP-вызовах веб-сервера - это не совсем то, о чем вы спрашивали выше ... вы хотели знать, как собрать все выбранные языки и передать их по URL-адресу, верно? Таким образом, вопрос, вероятно, никогда не закончится. Запустить http-вызов - это одно. Другое дело, как сервер с этим справится. Думаю, здесь слишком много смешанных тем. Я бы порекомендовал вам открыть новый вопрос, если остались какие-либо сомнения по поводу разговора по http. Если вы посмотрите на ответ, он уже слишком раздут. - person Diogo Lessa; 16.04.2020