2

我有一个接受检查模型的 Web API 控制器,即

public class Inspection
{
    public int ID {get; set;}
}

我在控制器上创建了一个 POST 方法。这很好用,我已经用 jQuery 对其进行了测试。

在我的 javascript 页面中,我创建了一个检查,即

var inspection = {
    ID: '123456'
};

然后像这样做 $.ajax :

var p = $.ajax({
    type: 'POST',
    url: 'http://...',
    cache: false,
    data: JSON.stringify(item),
    dataType: 'json',
    success: function(response) {
        //do stuff
    }
});

所以我的问题是:如果我有多个检查要发布,我如何将它们全部发送到控制器,无论是一批还是一批?

4

3 回答 3

3

在一次调用中发布多个整数应该很容易。一些快速检查的事情:

  1. 在您的控制器中,您的方法签名是否类似于:

    public void Post([FromBody]int[] values) { // code here }
    

    请注意 [FromBody] 属性的使用。

  2. 在您的 POST 中,内容类型标头是否设置为“ Content-Type: application/json ”?

于 2012-12-27T19:48:50.507 回答
0

嗯,根据您的服务器的期望,这样的事情可能会起作用:

var itemArr = [inspection0, inspection1, inspection2]; // etc...

var p = $.ajax({
    type: 'POST',
    url: 'http://...',
    cache: false,
    data: JSON.stringify(itemArr),
    dataType: 'json',
    success: function(response) {
        //do stuff
    }
}).fail(function(data) {
    // handle failure
});

或者,分批发送:

var i = 0,
    max = itemArr.length;

for (; i < max; i++) {
    $.ajax({
        type: 'POST',
        url: 'http://...',
        cache: false,
        data: JSON.stringify(itemArr[i]),
        dataType: 'json',
        success: function(response) {
            //do stuff
        }
    }).fail(function(data) {
        // handle failure
    });
}

此外,添加处理程序可能也是一个好主意.fail(...)

于 2012-12-20T16:33:00.440 回答
0

我过去曾使用jQuery.json插件来应对这种情况。

这是我发现的一个示例,说明如何使用它在单个 AJAX 调用中发送多个项目:

<script src="<%= Url.Content("~/Scripts/jquery-1.3.2.min.js") %>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/jquery.json-2.2.min.js") %>" type="text/javascript"></script>
<script type="text/javascript">
  function savePayment() {
    //Creating some test data
    var lineItems = new Object();
    lineItems.Entrys = new Array();
    lineItems.Entrys[0] = new Object({ Approved: "1.0", Deductible: "1.0", Coinsurance: "1.0", PaymentAmount: "1.0", VisitId: "1.0", VisitChargeId: "1.0" });
    lineItems.Entrys[1] = new Object({ Approved: "2.0", Deductible: "2.0", Coinsurance: "2.0", PaymentAmount: "2.0", VisitId: "2.0", VisitChargeId: "2.0" });


    //Posting them to server with ajax
    $.ajax({
      type: 'POST',
      contentType: 'application/json; charset=utf-8',
      url: '<%=Url.Action("SavePayment", "Home") %>',
      dataType: 'json',
      data: $.toJSON(lineItems),
      success: function(result) {
        if (result) {
          alert('Success');
        }
        else {
          alert('Failure');
        }
      }
    });
  }
</script>
于 2012-12-20T16:34:46.423 回答