Asp.net 将对象数组从javascript发送到webservice的最佳方式是什么?
我的javascript中有两个函数“类”: 我有我的js逻辑,它填满了房间和他们的产品 现在,我想将房间数组发送到Web服务,以进行一些计算并从中返回结果 如何将此数组对象发送到服务,以及服务将接收哪些数据类型以进行循环和处理 我试着这样编写javascript代码: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",
$.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对。