带有序列化和额外数据的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”!
希望这可以帮助。