• Нужно ли оборачивать сбор данных из формы в promise?

    Stalker_RED
    @Stalker_RED
    Нет, не нужно делать ее асинхронной, из формы и синхронно получится данные собрать.

    1. Если вдруг вы переделаете форму так, чтобы у полей были name, то можете выбросить функцию getSaveData и использовать $(form).serialize();

    2. сбор данных не обязательно записывать в переменную, да еще и объявленную через let. Можно делать прямо вот так:
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: getSaveData() },  // переменная data не нужна
        // ...
    })


    или, если у ваших полей есть имена
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: $(form).serialize() },
        // ...
    })

    и можно использовать встроенный в браузер способ
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: new FormData(form) },
        // ...
    })


    Кроме того, довольно странно делать отправку данных только по клику по кнопке. Обычно формы также отправляются при нажатии enter, и она таки отправится средствами самого браузера, "мимо" вашего ajax-ового отправлятора.

    Соответственно правильнее будет куак-то так:
    const $form = $("#idForm");
    $form.on('submit', function(evt) {
        evt.preventDefault(); // отмена обычной отправки
        
        $.ajax({
               type: "POST",
               url: $form.attr('action'),
               data: $form.serialize(),
          // ...


    А если вам вдруг не нужна поддержка очень старых браузеров, то можно вообще выбросить jQuery
    const form = document.getElementById('myForm');
    
    form.addEventListener('submit', function(evt){
      evt.preventDefault();
      fetch(form.action, {
        method: 'POST',
        body: new FormData(form)
      });
    });

    https://developer.mozilla.org/ru/docs/Web/API/Fetc...
    Ответ написан
    2 комментария
  • Как объединить объекты в массиве?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    let result = [
      {
        id: 1,
        name: 'obj',
      }
    ]
    
    let obj = {
      id: 1,
      age: 25,
    }
    
    result = result.map(
      item => item.id === obj.id ? {...item, ...obj} : item
    );
    Ответ написан
    Комментировать