如何在通过POST AJAX请求提交时向表单添加数据
How to add data to a form when submitting via a POST AJAX request?
我使用jQuery的$.ajax()
函数来提交表单。我像这样传递表单数据:
data: form.serialize()
但是,我想在POST请求中添加额外的数据。
根据这个答案,这样做的方法是在表单上使用serializeArray()
,然后将数据压入结果对象数组。问题是,当我尝试序列化结果数组时,jQuery返回一个错误。
下面是一个例子:
<form id="test">
<input type="hidden" name="firstName" value="John">
<input type="hidden" name="lastName" value="Doe">
</form>
JS:
console.log($("#test").serialize()); // firstName=John&lastName=Doe
var data = $("#test").serializeArray();
console.log(data); // [Object, Object]
data.push({name: 'middleName', value: 'Bob'});
console.log(data); // [Object, Object, Object]
console.log(data.serialize()); // Uncaught TypeError: undefined is not a function
JSFiddle
我做错了什么?
正如kapa所指出的,jQuery允许您将从serializeArray()
获得的数组直接作为data
参数传递,因此您的代码可以像;
var data = $("#test").serializeArray();
data.push({name: 'middleName', value: 'Bob'});
jQuery.ajax({
data: data,
// Other params
});
然而,解释为什么你以前的代码不能工作(这里开始我以前的答案);serializeArray()
实际上返回一个数组。数组没有serialize()
方法;这就是你的代码失败的原因。
对serializeArray()
返回的数组不使用serialize()
,而是调用jQuery.param()
;
var data = $("#test").serializeArray();
data.push({name: 'middleName', value: 'Bob'});
console.log(jQuery.param(data));
jQuery.param()
专门用于将serializeArray()
生成的{ name, value }
对转换为查询字符串。
serialize
是一个用于序列化表单对象的jquery方法。一旦你调用了serialize
,你就不再有一个jquery对象,因此你不能序列化它。您应该能够通过使用JSON对象对其进行字符串化来将JSON对象传递给$.ajax
:
$.ajax({
data: JSON.stringify(data)
//...
});
除了其他答案之外,有时在序列化之前简单地添加隐藏的输入元素会更容易。
$('<input type=hidden>').attr({name:'middleName',value:'bob'}).appendTo('form#test')
相关文章:
- Jquery提交表单而不刷新
- 如何在提交表单时将PHP变量传递到Javascript cookie中
- 每次提交表单时都会重新加载网页
- Razor中的自动提交表单
- 使用 JavaScript 自动提交表单
- 点击相同的按钮打开模型,然后提交表单
- 添加和删除隐藏字段数组中的值,而不提交表单
- 使用Ajax提交表单
- jQuery:使用“jQuery验证”后无法提交表单's远程验证
- 如何在不重新加载的情况下提交表单,并使用Node+Express将数据传递回同一页面
- 有登录表单时无法提交表单
- 带有select的jquery提交表单不起作用
- 如何防止回车键提交表单,但仍然允许回车工作
- 使用按钮和单选按钮提交表单,但始终使用相同的值
- 在提交表单之前确定重复值
- 如何创建动态ajax提交表单
- HTML提交表单,同时包含空字段检查和按钮隐藏
- 如何使用jQueryAjax使用动态html输入texbox提交表单
- 当触发下拉列表的onchange事件时,使用JavaScript提交表单
- 提交表单后,Watir文本框输入未持续(重置为以前的文本框输入)