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

Vit*_*kov 143 javascript jquery

好的,所以我试图找出是否可以发布序列化()和表单之外的其他数据.

这是我的工作,但它只发送'wordlist'而不是表单数据.

$.post("page.php",( $('#myForm').serialize(), { 'wordlist': wordlist }));
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

Fel*_*ing 318

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

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

$.post("page.php", data);
Run Code Online (Sandbox Code Playgroud)

  • 嗯.我想我比我的解决方案更喜欢这个:)我可能会在将来开始这样做. (11认同)
  • 顺便说一句,这个解决方案不起作用.查看我的解决方案以获得修复... (3认同)
  • @Gudradain:请看你对我的回答的评论.你错了.`serializeArray`不会产生你认为它的结构.我不确定你试图用你的演示展示什么.您只是警告数组的长度.如果我的[**demo**](http://jsfiddle.net/akyz1Lcy/)不能说服你,请查看[**文档**](http://api.jquery.com/serializearray /). (2认同)

Mic*_*ior 53

试试$ .param

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

  • 这是最好的解决方案! (3认同)

r3w*_*3wt 9

另一种解决方案,如果您需要在ajax文件上传中执行此操作:

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

或者甚至更简单.

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

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

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

    return false;

});
Run Code Online (Sandbox Code Playgroud)


Gud*_*ain 5

当你想在表单数据中添加一个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(){});
Run Code Online (Sandbox Code Playgroud)

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

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


Eri*_*ang 5

在新版本的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) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)