我能够使其工作(成功回调)。

但是我得到的是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作为请求类型。但是,那只是一个假设。试试看 ;-)

10-05 20:50
查看更多