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

IT技术 javascript jquery
2021-01-14 01:23:41

我试图找出是否可以发布serialize()表单之外的其他数据。

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

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

有没有人有任何想法?

6个回答

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

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

$.post("page.php", data);
@FelixKling 很抱歉那次失败,感谢您的解释。没有意识到对于要添加的每个参数,您确实需要格式 {name: 'your-paramater-name', value : 'your-parameter-value'}。
2021-03-20 01:23:41
@Gudradain:请参阅我对您的回答的评论。你错了。serializeArray不会产生您认为的结构。我不确定您想通过演示展示什么。您只是在提醒数组的长度。如果我的演示不能说服您,请查看文档
2021-03-22 01:23:41
@Gudradain:它工作得很好:jsfiddle.net/fnjncqhv如果它对您不起作用,那么您将面临不同的问题。
2021-03-24 01:23:41
唔。我想我比我的解决方案更喜欢这个 :) 我将来可能会开始这样做。
2021-03-27 01:23:41
不,它没有。jsfiddle.net/fnjncqhv/1 serializeArray() 生成一个对象数组,每个对象包含一个属性,如果您的数据对象包含多个属性(如您的示例),它会生成一个无效对象并且不会被绑定服务器端。请编辑您的答案以解决问题。
2021-03-30 01:23:41

试试$.param

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

替代解决方案,以防您需要在 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;

});

当你想在表单数据中添加一个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(){});
@FelixKling serializeArray() 产生 [{name1: 'value1'}, {name2: 'value2'}]。如果你有一个对象数据 { name3 : 'value3', name4: 'value4' } 并将它从 serializeArray() 推入数组,你会得到 [{name1: 'value1'}, {name2: 'value2'}, { name3:'value3', name4:'value4'}]。数组中的最后一个对象无效,您不会得到结果。
2021-03-14 01:23:41
serializeArray()生产[{name1: 'value1'}, {name2: 'value2'}]。” 不,它没有:jsfiddle.net/akyz1Lcy
2021-03-30 01:23:41
这将基本上生成一个看起来像[{name: 'wordlist'}, {value: wordlist}]. 这不是 jQuery 理解的格式,所以我怀疑这是否真的有效。
2021-04-07 01:23:41

在新版本的 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) {
    // ...
}