我有一张像电子表格一样的表格。当用户离开一行时,我想使用jQuery Ajax将该行的字段提交给服务器。页面是一个大表单,所以这不是一个javascript单击提交按钮场景 - 表单很大,我只想发送一小部分内容,原因是速度。
我已经编写了代码来识别行并迭代行中的字段。我的问题是如何构建dat对象以便提交一些可以理解的东西,我可以在服务器端进行反汇编和存储。
目前我的代码看起来像这样
var dat=[];
$("#" + finalrow).find("input").each(function () {
var o = $(this).attr("name");
var v = $(this).val();
dat.push({ o: v });
});
$.ajax({
url: 'UpdateRowAjax',
dataType: 'json',
type: 'POST',
data: dat ,
success: function (data) {
renderAjaxResponse(data);
}
});
数据的组装根本不起作用。那么我应该如何构建该数据对象,以使其“看起来”尽可能像表单提交一样。
答案 0 :(得分:7)
您可以将包含要发送的数据的元素添加到jQuery集合,然后在该对象上调用serialize
方法。它将返回一个可以发送给服务器的参数字符串。
var params = $("#" + finalrow).find("input").serialize();
$.ajax({
url: 'UpdateRowAjax',
type: 'POST',
data: params ,
success: function (data) {
renderAjaxResponse(data);
}
});
答案 1 :(得分:3)
您可以使用$.param()序列化元素列表。例如,在您的代码中:
var dat= $.param($("input", "#finalrow"));
$.ajax({
url: 'UpdateRowAjax',
dataType: 'json',
type: 'POST',
data: dat ,
success: function (data) {
renderAjaxResponse(data);
}
});
$ .param()的示例:http://jsfiddle.net/2nsTr/
serialize()映射到此函数,因此以这种方式调用它应该稍微有效。
答案 2 :(得分:2)
$.ajax
'data'参数需要键/值对(或字符串)的映射,而不是对象数组。试试这个:
var dat = {};
$("#" + finalrow).find("input").each(function () {
dat[$(this).attr('name')] = $(this).val();
});