JQuery post() с сериализацией и дополнительными данными

Хорошо, поэтому я пытаюсь выяснить, можно ли публиковать serialize() и другие данные вне формы.

Вот что я, хотя бы работал, но он только отправляет "список слов", а не данные формы.

$.post("page.php",( $('#myForm').serialize(), { 'wordlist': wordlist }));

У кого-нибудь есть идеи?

Ответ 1

Вы можете использовать serializeArray [docs] и добавить дополнительные данные:

var data = $('#myForm').serializeArray();
data.push({name: 'wordlist', value: wordlist});

$.post("page.php", data);

Ответ 2

Попробуйте $. param

$.post("page.php",( $('#myForm').serialize()+'&'+$.param({ 'wordlist': wordlist })));

Ответ 3

Альтернативное решение, если вам нужно сделать это при загрузке файла ajax:

var data = new FormData( $('#form')[0] ).append( 'name' , value );

ИЛИ даже проще.

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

    e.preventDefault();
    var data = new FormData( this ).append('name', value );

    // ... your ajax code here ...

    return false;

});

Ответ 4

Если вы хотите добавить объект javascript к данным формы, вы можете использовать следующий код

var data = {name1: 'value1', name2: 'value2'};
var postData = $('#my-form').serializeArray();
for (var key in data) {
    if (data.hasOwnProperty(key)) {
        postData.push({name:key, value:data[key]});
    }
}
$.post(url, postData, function(){});

Или, если вы добавите метод serializeObject(), вы можете сделать следующее

var data = {name1: 'value1', name2: 'value2'};
var postData = $('#my-form').serializeObject();
$.extend(postData, data);
$.post(url, postData, function(){});

Ответ 5

$.ajax({    
    type: 'POST',  
    url: 'test.php',  
    data:$("#Test-form").serialize(),  
    dataType:'json',
     beforeSend:function(xhr, settings){
     settings.data += '&moreinfo=MoreData';
     },
    success:function(data){
            //  json response  
    },
    error: function(data) { 
        // if error occured
    }
    });

Ответ 6

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

Другая возможность заключается в использовании этого маленького драгоценного камня, чтобы сериализовать вашу форму в объект javascript (вместо строки) и добавить отсутствующие данные:

var data = $('#myForm').serializeObject();
// now add some additional stuff
data['wordlist'] = wordlist;
$.post('/page.php', data);

Ответ 7

В новой версии jquery можно выполнить следующие действия:

  • получить массив параметров через serializeArray()
  • call push() или аналогичные методы для добавления дополнительных параметров в массив,
  • call $.param(arr), чтобы получить сериализованную строку, которая может использоваться как параметр jquery ajax data.

Пример кода:

var paramArr = $("#loginForm").serializeArray();
paramArr.push( {name:'size', value:7} );
$.post("rest/account/login", $.param(paramArr), function(result) {
    // ...
}

Ответ 8

Мне нравится сохранять объекты как объекты, а не сумасшедшие изменения типа. Здесь мой путь

var post_vars = $('#my-form').serializeArray();
$.ajax({
  url: '//site.com/script.php',
  method: 'POST',
  data: post_vars,
  complete: function() {
    $.ajax({
      url: '//site.com/script2.php',
      method: 'POST',
      data: post_vars.concat({
        name: 'EXTRA_VAR',
        value: 'WOW THIS WORKS!'
      })
    });
  }
});

если вы не видите сверху, я использовал функцию .concat и передал объект с переменной post как "имя", а значение "значение"!

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