带有序列化和额外数据的 jQuery post()

我试图找出是否有可能发布 serialize()和其他数据的形式之外。

下面是我认为可行的方法,但它只发送 'wordlist',而不发送表单数据。

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

有人知道吗?

256680 次浏览

您可以让表单以隐藏字段的形式包含额外的数据,在将 AJAX 请求发送到相应的值之前设置这些字段。

另一种可能性是使用 这颗小宝石将表单序列化为一个 javascript 对象(而不是字符串)并添加缺少的数据:

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

您可以使用 serializeArray < em > < sup > [ docs ] 并添加其他数据:

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


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

试试 $

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

当您希望将 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(){});

或者,如果添加方法 SeralizeObject (),则可以执行以下操作

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

另一个解决方案,如果你需要在一个 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;


});
$.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
}
});

我喜欢把物体当作物体,而不是做任何疯狂的类型转换。这是我的方法

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!'
})
});
}
});

如果你从上面看不到我用了。函数,并传入一个对象,其中 post 变量为“ name”,值为“ value”!

希望这个能帮上忙。

在新版本的 jquery 中,可以通过以下步骤完成:

  • 通过 serializeArray()获得参数数组
  • 调用 push()或类似的方法向数组中添加额外的参数,
  • 调用 $.param(arr)获取序列化字符串,该字符串可以用作 jquery ajax 的 data参数。

示例代码:

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

你可以用这个

var data = $("#myForm").serialize();
data += '&moreinfo='+JSON.stringify(wordlist);