jQuery ajax函数的数据动态参数

时间:2011-12-09 14:56:38

标签: jquery struts2

我有一个像这样的标准jquery ajax函数

    $.ajax({
    type: "POST",
    url: "/myApp/InsertRecord.action", 
    data: {
        table:table,
        issueNumber:issue_number,
        resultPointer:result_pointer
    }, 
    success: function(data) {
        $("#GRID_DIV").html(data);
    }
    });

如果我有动态名称的动态数量的附加参数,是否仍然可以使用jquery ajax函数?

为了展示我在做什么,在标准的.submit()场景中,我会抓住这样的数据:

    public MyAction extends ActionSupport implements ParameterAware, SessionAware, ServletContextAware {
    private Map<String, String[]> parameters;
    .
    .
    .
    Set<String> keySet = parameters.keySet();

修改

要创建数组,我可以这样做以获取表单中的所有相关名称:

var allNames=new Array();
var numberOfRecords = 0;
$('input:text[name^=rec_]').each(function() {
   allNames[numberOfRecords++] = $(this).attr('name');
});

因为我知道所有的动态名称至少都会以rec_开头,但问题是我没有为每个字段设置特定的getter / setter,因为我不知道它们的全名是什么。

3 个答案:

答案 0 :(得分:1)

参数的数量/类型无关紧要;你所需要的只是ParameterAware

没有必要将字段放在数组中。

答案 1 :(得分:1)

我真正缺少的是.serialize()jQuery函数。

我的javascript现在看起来像这样:

var formForm = $('#issueRecordInputForm').serialize();

var table = '<s:property value="table" />';
var issue_number = '<s:property value="issueNumber" />';
var result_pointer = '<s:property value="resultPointer" />';

$("#table").val(table);
$("#issueNumber").val(issue_number);
$("#resultPointer").val(result_pointer);

$.ajax({

    type: "POST",
    url: "/myApp/InsertRecord.action", 
    data: formForm,
    success: function(data) {
        $("#GRID_DIV").html(data);
    }
});

正如您所看到的,我还删除了以前的三个参数,而是使用表单中的相应值设置隐藏的ID。我无法真正混合我在数据中使用serialize调用的三个参数:ajax调用的一部分。完成此序列化后,struts的ParameterAware部分将正确处理此信息,如@Dave Newton所述。

答案 2 :(得分:0)

我对此并不是百分之百确定,但我非常确定您可以将要发送到服务器的所有数据聚合到一个阵列中然后发送。而不是

data: {
    field1: data1
    field2: data2
    ...
}

将所有字段放入数组,然后只发送数组