Javascript 通过ajax调用向序列化表单添加额外数据
我在向序列化表单字符串添加额外数据时遇到问题。 基本上我有一个表单,它有一组称为“服务”的字段,用户可以添加他想要的服务数量。我通过界面中的按钮动态添加服务输入。所以我的问题是当我想将它们添加到其他字段(序列化表单)时。我将这些输入添加到对象数组中。对于这个示例,我将仅手动创建它们 这是我的密码:Javascript 通过ajax调用向序列化表单添加额外数据,javascript,c#,jquery,ajax,forms,Javascript,C#,Jquery,Ajax,Forms,我在向序列化表单字符串添加额外数据时遇到问题。 基本上我有一个表单,它有一组称为“服务”的字段,用户可以添加他想要的服务数量。我通过界面中的按钮动态添加服务输入。所以我的问题是当我想将它们添加到其他字段(序列化表单)时。我将这些输入添加到对象数组中。对于这个示例,我将仅手动创建它们 这是我的密码: var form = mainContainer.find('form'); var seriliazedForm = form.serialize(); var url = me.r
var form = mainContainer.find('form');
var seriliazedForm = form.serialize();
var url = me.resolveUrl(form[0].action);
if (url == "XXXX") {
var services = [];
services.push({ ServiceId: '1', Service: "paint", Description: 'yellow', Price: '5' });
services.push({ ServiceId: '2', Service: "paint2", Description: 'yellow', Price: '6' });
seriliazedForm = seriliazedForm + "&" + $.param({ 'Services': services });
}
$.ajax({
type: auto.ajax.POST,
url: url,
data: seriliazedForm
});
因此,我想将这些“服务”绑定到url,以便在发布到该方法时可以
在ViewModel中查看它们。ViewModel的成员名为:
public List<ServiceViewModel> Services { get; set; }
二,
如果需要继续使用jQuery方法,则需要更改构建通过ajax发送的参数的方式:
var seriliazedForm = form.serializeArray();
seriliazedForm.push({ name: '1', value: JSON.stringify({ServiceId: '1', Service: "paint", Description: 'yellow', Price: '5' })});
seriliazedForm.push({ name: '2', value: JSON.stringify({ServiceId: '2', Service: "paint2", Description: 'yellow', Price: '6'})});
var formData = $.param(seriliazedForm);
记住在ajax调用中设置为false
主要的变化在于如何向表单数据添加新元素。因为每个新元素的形式应为:
{name: ...., value:....}
您需要将对象转换为一对名称/值
第二种方法基于使用和方法append:
var formData = new FormData(form.get(0));
formData.append('ServiceId1', { ServiceId: '1', Service: "paint", Description: 'yellow', Price: '5' });
formData.append('ServiceId2', { ServiceId: '2', Service: "paint2", Description: 'yellow', Price: '6' });
最后,您的ajax调用如下所示:
$.ajax({
type: 'POST',
url: 'z.html',
data: formData,
contentType: false,
processData: false
});
我尝试了这两种方法,但都没有结果,因为我已经有了一些表单,其中包含输入,当我尝试第一个场景时,他们没有发布到控制器(我添加了内容类型和流程数据)。你能告诉我是否有可能将列表与表单分开发送吗?因为你正在使用post,您确定您正确获取了服务器上的数据吗?我猜你把GET和POST搞混了。无论如何,我建议使用POST,因为查询字符串是有限的。此外,我把你的数组分成两个,你可以考虑把它作为一个元素发送,一个微小的改变。让我知道。Thanks@razi3lbr请看以下内容。
var formData = new FormData(form.get(0));
formData.append('ServiceId1', { ServiceId: '1', Service: "paint", Description: 'yellow', Price: '5' });
formData.append('ServiceId2', { ServiceId: '2', Service: "paint2", Description: 'yellow', Price: '6' });
$.ajax({
type: 'POST',
url: 'z.html',
data: formData,
contentType: false,
processData: false
});