Подтвердить что ты не робот

Измените POST файлы перед публикацией, используя jQuery

У меня есть форма и обработчик отправки в jQuery.

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

то есть.

  • Пользователь нажимает 'submit'
  • Мой jQuery submit hander начинает выполнение...
  • Я создаю несколько новых пар ключ/значение и добавляю их в полезную нагрузку POST

На данный момент, похоже, мои единственные варианты - использовать $.post() или $('form').append('<input type="hidden" name=... value=...');

Спасибо за любую помощь.

Изменить: я уже прикреплял обработчик отправки к форме; Я пытаюсь отредактировать почтовые ящики между пользователем, нажав кнопку отправки, и запрос, отправленный на сервер.

4b9b3361

Ответ 1

Используйте функцию submit() в форме для создания обратного вызова. Если функция возвращает true, форма будет отправлена; если false, форма не будет публиковать.

$('#theForm').submit(function() {
    $("#field1").val(newValue1);
    $("#field2").val(newValue2);
    $(this).append(newFormField);
    return true;
});

и др.

Ответ 2

Высокий уровень:
Когда форма отправляется изначально, это последняя операция, которую выполняет браузер, и выполняется за пределами интерпретатора engine/javascript. Любые попытки перехвата реального запроса POST или GET с помощью JavaScript невозможны, поскольку этот традиционный веб-запрос возникает исключительно между движком браузера и сетевой подсистемой.

Современное решение:
Для веб-разработчиков становится все более популярным отправлять данные формы с помощью XMLHttpRequest - API веб-браузера, который позволяет встроенному разработчику JavaScript получать доступ к сетевой подсистеме браузера.
This is commonly referred to as Ajax

Простое, но общее использование этого будет выглядеть примерно так:

<html>
  <form id="myForm" onsubmit="processForm()">
   <input type="text" name="first_name"/>
   <input type="text" name="last_name"/>
   <input type="submit" value="Submit">
  </form>

  <!--Using jQuery and Ajax-->
  <script type="text/javascript">
    /**
     * Function is responsible for gathering the form input data, 
     * adding additional values to the list, and POSTing it to the
     * server via Ajax.
     */
    function processForm() {
      //Retreive the data from the form:
      var data = $('#myForm').serializeArray();

      //Add in additional data to the original form data:
      data.push(
        {name: 'age',      value: 25},
        {name: 'sex',      value: 'M'},
        {name: 'weight',   value: 200}
      );

      //Submit the form via Ajax POST request:
      $.ajax({
        type: 'POST',
        url:  'myFormProcessor.php',
        data:  data,
        dataType: 'json'
      }).done(function(data) {
        //The code below is executed asynchronously, 
        //meaning that it does not execute until the
        //Ajax request has finished, and the response has been loaded.
        //This code may, and probably will, load *after* any code that
        //that is defined outside of it.
        alert("Thanks for the submission!");
        console.log("Response Data" +data); //Log the server response to console
      });
      alert("Does this alert appear first or second?");
    }
  </script>
</html>

Родной подход: До появления XMLHttpRequest одним из решений было бы просто добавить любые дополнительные данные формы непосредственно в документ.

Используя ту же форму, что и выше, метод добавления jQuery может выглядеть так:

<html>
  <form action="myFormProcessor.php" method="POST" id="myForm" onsubmit="return processForm()">
    <input type="text" name="first_name"/>
    <input type="text" name="last_name"/>
    <input type="submit" value="Submit">
  </form>

 <script type="text/javascript">
  /**
   * Function is responsible for adding in additional POST values
   * by appending <input> nodes directly into the form.
   * @return bool - Returns true upon completion to submit the form
   */
  function processForm() {
    $('<input>').attr('type', 'hidden').attr('name', 'age').attr('value', 25).appendTo('#myForm');
    $('<input>').attr('type', 'hidden').attr('name', 'sex').attr('value', 'M').appendTo('#myForm');
    $('<input>').attr('type', 'hidden').attr('name', 'weight').attr('value', 200).appendTo('#myForm');

    return true; //Submit the form now 
    //Alternatively you can return false to NOT submit the form.
  }
 </script>
</html>

Ответ 3

Я не думаю, что вы можете изменить POST файлы таким образом. Когда обработчик submit запускает там хеш данных формы, которые действительно существуют, которые вы можете добавить или изменить. Я думаю, что вы правы - ваши собственные варианты $.post() сами (что я рекомендовал) или добавление скрытых входов в форму (есть накладные расходы на модификацию DOM, которые вам действительно не нужны).

Ответ 4

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

вы можете использовать JQuery.clone(), чтобы создать копию формы, которую вы хотите отправить. Затем вы можете внести изменения в копию и, наконец, отправить копию.

Ответ 5

Прикрепите обработчик submit() к форме.

$('form#myForm').submit(myPostHandlingFunction);

Затем отправьте/сделайте сообщение из своей функции. Проще всего было бы просто заполнить пару скрытых входов в форме, а затем вернуть true, чтобы позволить submit, если все выглядит правильно.

Ответ 6

Вы можете подключить событие нажатия кнопки отправки и выполнить свою обработку. Для пар ключ/значение вы можете попробовать скрытый элемент формы.

Ответ 7

$("#frm").submit(function (e) {
    e.preventDefault();
    form = document.getElementById("frm"); //$("#frm")

    $.each(form.elements, function (i, el) {
        el.name = your_new_name;
        el.value = your_new_value;
        //... //el.type, el.id ...
    });

    form.submit();

    return true;
});