Передать всю форму как данные в функции jQuery Ajax - PullRequest
132 голосов
/ 07 января 2010

У меня есть функция jQuery ajax, и я хотел бы отправить всю форму в виде данных поста. Мы постоянно обновляем форму, поэтому становится утомительным постоянно обновлять входные данные формы, которые должны быть отправлены в запросе.

Ответы [ 7 ]

250 голосов
/ 07 января 2010

Есть функция, которая делает именно это:

http://api.jquery.com/serialize/

var data = $('form').serialize();
$.post('url', data);
46 голосов
/ 05 января 2015

serialize () не очень хорошая идея, если вы хотите отправить форму методом post. Например, если вы хотите передать файл через ajax, он не будет работать.

Предположим, что у нас есть форма с таким идентификатором: "myform".

лучшее решение - создать FormData и отправить его:

    var myform = document.getElementById("myform");
    var fd = new FormData(myform );
    $.ajax({
        url: "example.php",
        data: fd,
        cache: false,
        processData: false,
        contentType: false,
        type: 'POST',
        success: function (dataofconfirm) {
            // do something with the result
        }
    });
24 голосов
/ 07 января 2010

В общем случае используйте serialize() в элементе формы.

Обратите внимание, что несколько параметров

<select id="foo" name="foo" multiple="multiple">
    <option value="1">one</option>
    <option value="2">two</option>
    <option value="3">three</option>
</select>

приведет к строке запроса, включающей несколько вхождений одного и того же параметра запроса:

[path]?foo=1&foo=2&foo=3&someotherparams...

что не может быть тем, что вы хотите в бэкэнде.

Я использую этот код JS, чтобы свести несколько параметров к одному ключу, разделенному запятыми (беззастенчиво скопированному из ответа комментатора в потоке вместо Джона Резига):

function compress(data) {
    data = data.replace(/([^&=]+=)([^&]*)(.*?)&\1([^&]*)/g, "$1$2,$4$3");
    return /([^&=]+=).*?&\1/.test(data) ? compress(data) : data;
}

, что превращает вышесказанное в:

[path]?foo=1,2,3&someotherparams...

В своем коде JS вы бы назвали это так:

var inputs = compress($("#your-form").serialize());

Надеюсь, это поможет.

15 голосов
/ 07 января 2010

Используйте

serialize ()

var str = $("form").serialize();

Сериализация формы в строку запроса, которая может быть отправлена ​​на сервер в запросе Ajax.

1 голос
/ 01 марта 2017

Хороший вариант для jQuery - через FormData . Этот метод также подходит при отправке файлов через форму!

<form id='test' method='post' enctype='multipart/form-data'>
   <input type='text' name='testinput' id='testinput'>
   <button type='submit'>submit</button>
</form>

Ваша функция отправки в jQuery будет выглядеть так:

$( 'form#test' ).submit( function(){
   var data = new FormData( $( 'form#test' )[ 0 ] );

   $.ajax( {
      processData: false,
      contentType: false,

      data: data,
      dataType: 'json',
      type: $( this ).attr( 'method' );
      url: 'yourapi.php',
      success: function( feedback ){
         console.log( "the feedback from your API: " + feedback );
      }
});

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

var data = new FormData( $( 'form#test' )[ 0 ] );
data.append( 'command', 'value_for_command' );
0 голосов
/ 25 июня 2018

Другие решения не сработали для меня. Возможно, старый DOCTYPE в проекте, над которым я работаю, не позволяет использовать опции HTML5.

Мое решение:

<form id="form_1" action="result.php" method="post"
 onsubmit="sendForm(this.id);return false">
    <input type="hidden" name="something" value="1">
</form>

ЯШ:

function sendForm(form_id){
    var form = $('#'+form_id);
    $.ajax({
        type: 'POST',
        url: $(form).attr('action'),
        data: $(form).serialize(),
        success: function(result) {
            console.log(result)
        }
    });
}
0 голосов
/ 27 февраля 2018

Вы просто должны опубликовать данные. и используя jquery ajax функцию установить параметры. Вот пример.

<script>
        $(function () {

            $('form').on('submit', function (e) {

                e.preventDefault();

                $.ajax({
                    type: 'post',
                    url: 'your_complete url',
                    data: $('form').serialize(),
                    success: function (response) {
                        //$('form')[0].reset();
                       // $("#feedback").text(response);
                        if(response=="True") {
                            $('form')[0].reset();
                            $("#feedback").text("Your information has been stored.");
                        }
                        else
                            $("#feedback").text(" Some Error has occured Errror !!! ID duplicate");
                    }
                });

            });

        });
    </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...