Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将对象数组从javascript发送到webservice的最佳方式是什么?_Asp.net_Javascript_Jquery_Ajax_Web Services - Fatal编程技术网

Asp.net 将对象数组从javascript发送到webservice的最佳方式是什么?

Asp.net 将对象数组从javascript发送到webservice的最佳方式是什么?,asp.net,javascript,jquery,ajax,web-services,Asp.net,Javascript,Jquery,Ajax,Web Services,我的javascript中有两个函数“类”: 我有我的js逻辑,它填满了房间和他们的产品 现在,我想将房间数组发送到Web服务,以进行一些计算并从中返回结果 如何将此数组对象发送到服务,以及服务将接收哪些数据类型以进行循环和处理 我试着这样编写javascript代码: $.ajax({ type: "POST", contentType: "application/json; charset=utf-8",

我的javascript中有两个函数“类”:

我有我的js逻辑,它填满了房间和他们的产品

现在,我想将房间数组发送到Web服务,以进行一些计算并从中返回结果

如何将此数组对象发送到服务,以及服务将接收哪些数据类型以进行循环和处理

我试着这样编写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";
    }
网络服务是这样的:

        $.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]

更改:

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


在这种情况下,这将起作用:

//...
   data : '{"rooms":[' + roomsObjects.join() + ']}',
//...
上面的代码将生成有效的JSON字符串,但我建议您获取并使用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);
              }
      });

如果您不介意包含一个小小的JavaScript库,我想

下面是那篇文章的一个片段:

// 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数组,以便发送到ASP.NET AJAX服务中获取数组和列表参数


使用JSON.Stringify的一个好处是,在支持原生JSON序列化的浏览器(FF 3.5,IE 8,Safari和Chrome的夜间版本)中,它将自动利用浏览器原生例程,而不是使用JavaScript。因此,在这些浏览器中,它会自动提高速度。

Web服务已经存在了吗?它需要某种格式吗?是的,它存在并接收数据“错误的数据”我不知道roomsObjects是如何组织的jquery docs说要使用对象或字符串,如“var1=value1&var2=value2”调用ASP.NET AJAX服务时必须引用数据参数。如果将对象作为数据参数传递给jQuery,它将在POST请求中将其序列化为k=v对。ASP.NET AJAX服务希望使用JSON字符串表示参数,而不是k=v对。