将 AJAX 调用上的对象发送到 WebMethod
Posted
技术标签:
【中文标题】将 AJAX 调用上的对象发送到 WebMethod【英文标题】:Sending object on AJAX call to WebMethod 【发布时间】:2016-11-11 10:28:40 【问题描述】:我正在尝试将 JSON 对象发送到 C# 方法,并返回一个不同的(也是 JSON)对象。
对象是在 javascript 中创建的:
lottery =
TotalValue: totalValue,
Players: txtPlayers.value,
TicketPrice: txtAmount.value,
FirstPrize: prize,
MyComission: myComission,
MyRate: myRate,
SellerComission: sellerComission,
SellerRate: sellerRate
然后通过 AJAX 发送:
function CreateLottery(lottery)
$.ajax(
type: 'POST',
url: 'default.aspx/Create',
data: lottery,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, status)
alert(status)
,
error: alert("error!")
);
C# 代码隐藏(我有断点,它永远不会到达这里):
[WebMethod]
public static object Create(Lottery lottery)
return new
foo = "bar",
;
public class Lottery
public decimal TotalValue get; set;
public decimal Players get; set;
public decimal TicketPrice get; set;
public decimal FirstPrize get; set;
public decimal MyComission get; set;
public decimal MyRate get; set;
public decimal SellerComission get; set;
public decimal SellerRate get; set;
为什么我总是得到“错误!”警报?
【问题讨论】:
"为什么总是出错?" - 那会是什么错误呢? 检查答案并告诉我它是否有效。 我已经编辑了问题,无需反对。这是一个合理的问题,正在发生一些特殊的事情,我正在寻求帮助,而不是让任何人为我做这项工作。 【参考方案1】:您可以将数据发送到网络方法,有两种类型的方法如下。
方法一
您可以在 web 方法中传递每个属性值,例如 as
function CreateLottery(lottery)
$.ajax(
type: 'POST',
url: 'default.aspx/Create',
data: 'TotalValue': totalValue, 'Players': txtPlayers.value,'TicketPrice': txtAmount.value, 'FirstPrize': prize, 'MyComission': myComission, 'MyRate': myRate, 'SellerComission': sellerComission, 'SellerRate': sellerRate,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, status)
alert(status)
,
error: alert("error!")
);
方法二
使用 JSON.stringify(lottery)
将数组对象更改为字符串。
var lottery =
TotalValue: totalValue,
Players: txtPlayers.value,
TicketPrice: txtAmount.value,
FirstPrize: prize,
MyComission: myComission,
MyRate: myRate,
SellerComission: sellerComission,
SellerRate: sellerRate
function CreateLottery(lottery)
$.ajax(
type: 'POST',
url: 'default.aspx/Create',
data: JSON.stringify(lottery),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, status)
alert(status)
,
error: alert("error!")
);
【讨论】:
我这样做了,还修复了错误回调,如另一个答案所示,但仍然得到“错误!”。我尝试了你的两种方法。问题是否可能是数据没有像 Lottery 类所期望的那样以十进制(数字)形式发送?【参考方案2】:首先对数据进行字符串化:
var lottery =
TotalValue: totalValue,
Players: txtPlayers.value,
TicketPrice: txtAmount.value,
FirstPrize: prize,
MyComission: myComission,
MyRate: myRate,
SellerComission: sellerComission,
SellerRate: sellerRate
function CreateLottery(lottery)
$.ajax(
type: 'POST',
url: 'default.aspx/Create',
data: JSON.stringify(lottery),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, status)
alert(status);
,
error: function ()
alert("error!");
);
编辑:您的错误回调定义不正确,每次调用 ajax 时都会触发。修改如上图。
【讨论】:
谢谢。我已经修复了你所说的,但我仍然得到“错误!”。问题是否可能是某些值没有像 Lottery 类值所期望的那样以十进制(数字)形式发送?以上是关于将 AJAX 调用上的对象发送到 WebMethod的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用
如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器
Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析