将Javascript数组发布到Web API

时间:2014-02-18 23:42:21

标签: javascript jquery arrays json asp.net-web-api

我想将Javascript数组发布到WebAPI。

我有我的Javascript数组,如:

var checkedGroups = [];
var checkedStaff = [];

$.each(items, function () {

    if (this.checked) {
        type = dataAdapter.records[this.id - 1].VALUETYPE;
        if (type == 'Staff') {
            checkedStaff[checkedStaff.length] = this.value;
        } else {
            checkedGroups[checkedGroups.length] = this.value;
        }
    }
});

然后我使用它发送给我的WebAPI:

data: { staff: JSON.stringify(checkedStaff) };

我的WebAPI控制器就像:

public HttpResponseMessage Post([FromBody] formData data)
{
    string string_group = String.Join(",", data.group);
    string string_staff = String.Join(",", data.staff); 
}

我的formData类是这样的:

public class formData
{
    public Array group { get; set; }
    public Array staff { get; set; }
}

如上所述,我想将数组拆分出来以制作逗号分隔字符串。

但是服务器端的string_staff变量只是一个空字符串,我的JSON数据是这样的:

staff: "["1"]"
group: ""

我不想在数组中使用键/值类型。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

将checkedGroups和checkedStaff变量更改为对象文字。 Javascript中的关联数组并不像你试图设置的那样。

var checkedGroups = {};
var checkedStaff = {};

$.each(items, function () {

    if (this.checked) {
        type = dataAdapter.records[this.id - 1].VALUETYPE;
        if (type == 'Staff') {
            checkedStaff[checkedStaff.length] = this.value;
        } else {
            checkedGroups[checkedGroups.length] = this.value;
        }
    }
});

如果您这样做,可以将它们保留为数组:

checkedStaff.push(this.value);

答案 1 :(得分:0)

通常,您应该使用jQuery ajax函数$.ajax({ ... })发布到Web API控制器。我发现这种方法效果最好:

function postJSON(data)
{
  return $.ajax({
    url: '/api/xyz',
    type: 'POST',
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8" // must have this option set
  });
}

function doSomethingElse() {

  postJSON({ staff: checkedStaff, group: checkedGroup })
    .done(function(response) { ... });

}