Nat*_*ate 3 javascript forms ajax jquery
我正在使用jQuery的$.ajax()函数来提交表单.我传递这样的表单数据:
data: form.serialize()
Run Code Online (Sandbox Code Playgroud)
但是,我想在POST请求中添加其他数据.
根据这个答案,这样做的方法是serializeArray()在表单上使用,然后将数据推送到生成的对象数组.问题是当我尝试序列化结果数组时,jQuery会返回错误.
这是一个例子:
<form id="test">
<input type="hidden" name="firstName" value="John">
<input type="hidden" name="lastName" value="Doe">
</form>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
正如kapa所指出的,jQuery允许你直接将你得到的数组serializeArray()作为data参数传递,所以你的代码可以像下面那样简单;
var data = $("#test").serializeArray();
data.push({name: 'middleName', value: 'Bob'});
jQuery.ajax({
data: data,
// Other params
});
Run Code Online (Sandbox Code Playgroud)
但是,要解释为什么你以前的代码不起作用(这里开始我以前的答案); serializeArray()字面上返回一个数组.数组没有serialize()方法; 这就是你的代码失败的原因.
而不是serialize()在返回的数组上使用serializeArray(),调用jQuery.param();
var data = $("#test").serializeArray();
data.push({name: 'middleName', value: 'Bob'});
console.log(jQuery.param(data));
Run Code Online (Sandbox Code Playgroud)
jQuery.param()具体提供用于将{ name, value }生成的对serializeArray()转换为查询字符串.
| 归档时间: |
|
| 查看次数: |
2436 次 |
| 最近记录: |