我在我的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]
答案 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},