什么是从javascript向Web服务发送对象数组的最佳方法?

时间:2009-09-09 00:10:16

标签: asp.net javascript jquery ajax web-services

我在我的javascript中有这两个函数“classes”:

// product class
function Product() {
 this.id;
 this.qty;
 this.size;
 this.option;
}

// room class
function Room() {
 this.id;
 this.type;
 this.products = [];
}

我的js逻辑填充了房间及其产品。

现在我想将一组房间发送到网络服务进行一些计算,然后从中获取结果。

如何将此数组对象发送到服务,并了解服务将接收的数据类型以进行循环并处理?

我试着写这样的javascript代码:

        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "_Services/MyWebService.asmx/CalculatePrices",
            data: "{'rooms':'" + roomsObjects + "'}",
            dataType: "json",
            success: function(result) {
                alert(result.d);
            }
        });

这样的网络服务:

[WebMethod]
    public string CalculatePrices(object rooms)
    {
        return "blabla";
    }

但是我发现wbservice中的房间总是= [object Object]

3 个答案:

答案 0 :(得分:3)

对于这种情况,这将起作用:

//...
   data : '{"rooms":[' + roomsObjects.join() + ']}',
//...

上面的代码将生成一个有效的JSON字符串,但我建议您使用JSON library并使用JSON.stringify函数:

      $.ajax({
              type: "POST",
              contentType: "application/json; charset=utf-8",
              url: "_Services/MyWebService.asmx/CalculatePrices",
              data: JSON.stringify({'rooms': roomsObjects}),
              dataType: "json",
              success: function(result) {
                 alert(result.d);
              }
      });

答案 1 :(得分:2)

如果您不介意包含一个小型JavaScript库,我认为using json2.js' JSON.Stringify is the best way to serialize objects for use with ASP.NET AJAX services

以下是该帖子的摘录:

// Initialize the object, before adding data to it.
//  { } is declarative shorthand for new Object().
var NewPerson = { };

NewPerson.FirstName = $("#FirstName").val();
NewPerson.LastName = $("#LastName").val();
NewPerson.Address = $("#Address").val();
NewPerson.City = $("#City").val();
NewPerson.State = $("#State").val();
NewPerson.Zip = $("#Zip").val();

// Create a data transfer object (DTO) with the proper structure.
var DTO = { 'NewPerson' : NewPerson };

$.ajax({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: "PersonService.asmx/AddPerson",
  data: JSON.stringify(DTO),
  dataType: "json"
});

该示例中没有数组,但JSON.Stringify以正确的格式序列化JavaScript数组,以便为​​数组和List参数发送到ASP.NET AJAX服务。

使用JSON.Stringify的一个好处是,在支持本机JSON序列化(FF 3.5,IE 8,每晚构建Safari和Chrome)的浏览器中,它将自动利用浏览器本机例程而不是使用JavaScript 。因此,它可以在这些浏览器中实现自动速度提升。

答案 2 :(得分:0)

变化:

data: "{'rooms':'" + roomsObjects + "'}",

为:

data: {'rooms':roomsObjects},