如何使用jQuery“提交”表单的一部分

时间:2010-09-08 17:07:16

标签: javascript jquery

我有一张像电子表格一样的表格。当用户离开一行时,我想使用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);
    }
});

数据的组装根本不起作用。那么我应该如何构建该数据对象,以使其“看起来”尽可能像表单提交一样。

3 个答案:

答案 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();
});