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

好吧,所以我试图找出是否有可能发布serialize()和其他数据在表单之外。

这是我的工作,但它只发送“wordlist”,而不是表单数据。

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

有人有主意吗?

你可以使用serializeArray [docs]并添加额外的数据:

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

试试$ .param

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

另一种解决scheme,如果你需要在ajaxfile upload上做到这一点:

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

您可以将表单中包含的附加数据作为隐藏字段,您可以在将AJAX请求发送到相应的值之前进行设置。

另一种可能性包括使用这个小gem将您的表单序列化为JavaScript对象(而不是string)并添加缺less的数据:

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

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

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

示例代码:

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

我喜欢把物体作为物体,而不是做任何疯狂的types转换。 这是我的方式

 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函数,并传入一个对象,其中postvariables为“name”,值为“value”!

希望这可以帮助。