通过带有多个参数的{ajax}发送表单

时间:2018-01-02 03:39:26

标签: javascript jquery ajax forms

我使用ajax提交表单。表单包含两个表和多个输入。表单ID为frmCreateRatedataTable1dataTable2工作正常。我想提交frmCreateRate以及dataTable1dataTable2。我尝试使用此代码,但它显示null值。这是代码:

   $.ajax({
        type: 'POST', 
        url: "/Rate/CreateRate",
        contentType: 'application/json',
        data:  JSON.stringify({Observations:dataTable2, Summary: dataTable1, Input: $('#frmCreateRate').serialize()}),
        dataType: "json",            
    });

控制器:

public ActionResult CreateRate(List<Observations> Observations, List<Summaries> Summary, StaffDomain Input)
{
    //Codes
}

我尝试只使用dataTable1dataTable2,两个表中的值都会在控制器中捕获。但是当我添加另一个frmCreateRate参数时,它会显示空值。

更新

以下是控制器内的一些代码:

public ActionResult CreateRate(List<Observations> Observations, List<Summaries> Summary, StaffDomain Input)
   {
        var domain = new StaffRecord
        {
            Diagnosis = Input.Diagnosis,
            Code = Input.Code,
            Time = Input.Time,
            Date = Input.Date,
            Department = Input.Department,
            STaffInformed = Input.STaffInformed,
            TimeArrived = Input.TimeArrived,

        };

        db.StaffRecords.Add(domain);
        db.SaveChanges();

        return RedirectToAction("List");
    }

1 个答案:

答案 0 :(得分:0)

serialize()函数用于将表单作为标准application/x-www-form-urlencoded MIME提交,如下所示:

single=MySingleValue&check=checkboxValue&radio=radioValue

您正在发送application/json MIME,因此您必须将表单值逐个添加到JSON对象,就像使用dataTable2dataTable1一样。强烈建议不要在一个参数中发送复杂对象。但是,如果您希望忽略该建议并继续使用当前设计,则可以自动执行表单序列化,而不是逐个添加值。为此,您可以使用serializeArray()函数和辅助方法。

serializeArray()将表单元素序列化为名称和值的数组,如下所示:

[
  {
    name: "textbox1",
    value: "1"
  },
  {
    name: "textbox2",
    value: "2"
  },
  {
    name: "textbox3",
    value: "3"
  }
]

要将其转换为JSON对象,可以使用此辅助方法:

function serializeFormToJson(selector) {
  var formArray = $(selector).serializeArray();
  var json = {};
  for (var i = 0; i < formArray.length; i++) {
    json[formArray[i]['name']] = formArray[i]['value'];
  }
  return json;
} 

现在您可以将Ajax调用更改为:

$.ajax({
    type: 'POST', 
    url: "/Rate/CreateRate",
    contentType: 'application/json',
    data: JSON.stringify({Observations: dataTable2, Summary: dataTable1, Input: serializeFormToJson("#frmCreateRate")}),
    dataType: "json",            
});