我能够使其工作(成功回调)。
但是我得到的是default.aspx的整个HTML
AJAX:
function CreateLottery(lottery) {
debugger; // 'lottery' comes with the properties of the Lottery class
$.ajax({
type: 'POST',
url: 'default.aspx/Create',
data: JSON.stringify({ data: lottery }),
dataType: 'text',
success: function (data, status) {
alert(data.TotalValue + " " + status) //"undefined success"
},
error: function () {
alert("error!")
}
});
}
我在警报中得到“未定义的成功”。 “数据”是整个html文档,而不是“彩票”对象。
Create WebMethod和Lottery类:
[WebMethod]
public static Lottery Create(Lottery lottery)
{
return lottery;
}
public class Lottery
{
public string TotalValue { get; set; }
public string Players { get; set; }
}
我不知道发生了什么,WebMethod返回的是与接收到的对象完全相同的对象,我如何无法在成功回调中访问它?
编辑:WebMethod没有被击中。 “ ScriptManager”存在于default.aspx中,且EnablePageMethods设置为true。如果我将WebMethod名称(创建)更改为任何值,并将/ Create保留在AJAX url中,则仍然会得到整个default.aspx HTML作为响应。
最佳答案
我认为您必须考虑两件事:
首先:您必须更正内容类型标头。它应该是application/json
而不是text
。
另一个问题是[WebMethod]
需要XML。它不能开箱即用地处理JSON。
为了让您的WebMethod返回以JSON格式格式化的内容,您必须另外将其装饰为ScriptMethod
。
该属性允许您将响应的格式指定为JSON。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static Lottery Create(Lottery lottery)
{
// ...
}
是的,但是我不确定一件事:虽然可以指定
ResponseFormat
,但没有找到指定RequestFormat
的方法。我假设当您将其定义为响应类型时,它接受JSON作为请求类型。但是,那只是一个假设。试试看 ;-)