Передача значений в Post-запрос JSON

#javascript #json #event-handling

#javascript #json #обработка событий

Вопрос:

Моя первоначальная проблема заключалась в том, что он получал значение, когда пользователь нажимал на кнопку создания, но не на кнопку отправки.

Теперь я изменил его, чтобы использовать другую новую функцию, когда пользователь нажимает отправить. Однако теперь он ничего не делает.

Может кто-нибудь сказать мне, что я делаю не так? Я использовал метод onclick в HTML, а затем создал функцию на своей странице Javascript.

HTML:

 <div id="compose-view">
        <h3>New Email</h3>
        <form id="compose-form"
        method="POST">
            {% csrf_token %}
            <div class="form-group">
                From: <input disabled class="form-control" value="{{ request.user.email }}">
            </div>
            <div class="form-group">
                To: <input id="compose-recipients" class="form-control">
            </div>
            <div class="form-group">
                <input class="form-control" id="compose-subject" placeholder="Subject">
            </div>
            <textarea class="form-control" id="compose-body" placeholder="Body"></textarea>
            <input type="submit" id="sendEmail" class="btn btn-primary"/>
        </form>
    </div>
  

JS:

 const element = document.getElementById('sendEmail');
  element.addEventListener('click', function() {
    fetch('/emails', {
    method: 'POST',
    body: JSON.stringify({
      recipients: 'card51short@gmail.com',
      subject: "buglets",
      body: 'Hes a fat one'
    })
  })
  .then(response => response.json())
  .then(result => {
      // Print result
      console.log(result);
  });
  });
}
  

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

1. Пожалуйста, уточните, что не работает. Вы получаете какие-либо ошибки? Вы проверили, что fred переменная содержит что-либо, а не undefined нет?

2. он пустой. Ошибок нет.

3. Что console.log(fred) печатается?

4. Что вы подразумеваете под «ничего не делать»?

5. функция выполняется не так, как предполагалось. Ничего не происходит. Ошибок нет. Однако я снова изменил свой код.

Ответ №1:

Хорошо, в таких случаях вам необходимо провести исследование вашего кода:

  1. Проверьте fred , действительно ли это строка, и нет undefined . Кроме того, сделайте его явной константой
   const fred = document.querySelector('#compose-subject').value // changed
  console.log(fred); // new

  fetch('/emails', {
    method: 'POST',
    body: JSON.stringify({
      recipients: 'card51short@gmail.com',
      subject: fred,
      body: 'Hes a fat one'
    })
  })
  .then(response => response.json())
  .then(result => {
      // Print result
      console.log(result);
  });
  
  1. Если все в порядке, выполните следующую проверку того, что возвращается выборкой:
   const fred = document.querySelector('#compose-subject').value

  fetch('/emails', {
    method: 'POST',
    body: JSON.stringify({
      recipients: 'card51short@gmail.com',
      subject: fred,
      body: 'Hes a fat one'
    })
  })
  .then(response => { // edited
    console.log(response); // new
    return response.json() // edited
  }) // edited
  .then(result => {
      // Print result
      console.log(result);
  });
  

К концу этого процесса вы должны найти то, что не работает

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

1. Спасибо. Я изменил свою проблему выше, если вы можете это проверить. Я понял, почему он получал пустой элемент — он получал значение элемента до того, как пользователь его заполнил. Теперь у меня возникла новая проблема. Спасибо!

2. Пожалуйста, отметьте ответ как принятый, если он вам помог 🙂

Ответ №2:

атрибут «value» возвращает неопределенное значение для тегов, отличных от входных. Попробуйте вместо этого использовать innerHTML:

 fred = document.querySelector('#compose-subject').innerHTML;
  

проверьте свое значение для fred с помощью cosole.log:

 console.log(fred);
  

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

1. innerHTML не возвращает значение ввода. Мы не знаем, является ли #compose-subject это вводом или нет, но я предполагаю, что это так.

2. @robo robok я согласен. Обновлен приведенный выше ответ.

3. журнал консоли полностью пуст. Ничего не показывает.

4. Я думаю, что знаю, в чем проблема. Значения передаются, когда пользователь нажимает «Создать электронное письмо» … а не когда он нажимает «Отправить электронное письмо». таким образом, он не получает никаких значений, поскольку выполняет проверку сразу после открытия формы создания электронной почты. Я хочу, чтобы он получал значения после того, как пользователь нажимает кнопку отправки

5. ребята, вы можете ознакомиться с моим новым выпуском выше? Он запускает функцию после нажатия кнопки отправки. Спасибо