C# ASP.NET 3.5使用AJAX调用[WebMethod]时出错-500

C# ASP.NET 3.5使用AJAX调用[WebMethod]时出错-500,c#,jquery,asp.net,ajax,webmethod,C#,Jquery,Asp.net,Ajax,Webmethod,我有一个网站项目(ASP.NET3.5) 其中一个方法位于Search.aspx.cs中,看起来像这样。这是我尝试调用的方法,因此我可以将一些数据返回到Ajax调用: [WebMethod] public static string TestMethod(string param) { return "It worked"; } 在客户端调用上述方法时遇到困难,请单击Search.aspx页面内的按钮: <form runat="serve

我有一个网站项目(ASP.NET3.5)

其中一个方法位于Search.aspx.cs中,看起来像这样。这是我尝试调用的方法,因此我可以将一些数据返回到Ajax调用:

    [WebMethod]
    public static string TestMethod(string param)
    {
        return "It worked";
    }
在客户端调用上述方法时遇到困难,请单击Search.aspx页面内的按钮:

<form runat="server" id="mainForm" class="form-horizontal">
<input id="addButton" type="button" value="Add" />
</form>

<script>
$('#addButton').click(function () {
            $.ajax({
                type: "GET",
                url: "Search.aspx/TestMethod",
                data: "{}",
                contentType: "application/json",
                dataType: "json",
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
                },
                success: function (result) {
                    alert("We returned: " + result);
                }
            });
        });

</script>

$(“#添加按钮”)。单击(函数(){
$.ajax({
键入:“获取”,
url:“Search.aspx/TestMethod”,
数据:“{}”,
contentType:“应用程序/json”,
数据类型:“json”,
错误:函数(XMLHttpRequest、textStatus、errorshown){
警报(“请求:+XMLHttpRequest.toString()+”\n\n状态:+textStatus+”\n\n错误:+ErrorSwink);
},
成功:功能(结果){
警报(“我们返回:+结果”);
}
});
});
下面是显示错误ajax函数的警报框的屏幕

以下是Firefox调试器的另一个示例:

以下是Firefox调试器出现完整错误的屏幕截图:


您的方法希望收到一个参数

将您的方法更改为:

[WebMethod]
public static string TestMethod()
{
    return "It worked";
}
或者将您的js更改为此(您必须使用POST类型):


$(“#添加按钮”)。单击(函数(){
$.ajax({
类型:“POST”,
url:“Search.aspx/TestMethod”,
数据:JSON.stringify({“param”:“anything”}),
contentType:“应用程序/json”,
数据类型:“json”,
错误:函数(XMLHttpRequest、textStatus、errorshown){
警报(“请求:+XMLHttpRequest.toString()+”\n\n状态:+textStatus+”\n\n错误:+ErrorSwink);
},
成功:功能(结果){
警报(“我们返回:+结果”);
}
});
});

您能让firfox调试器屏幕截图更具可读性吗?调试时,您的服务器代码中是否也有错误?如果是,它说什么?如果不是,这意味着IIS正在抛出错误,它将出现在您的IIS日志中。@JasonRoell我通过visual studio而不是IIS运行此操作。我在未触发的代码后面设置了断点。请尝试使用
contentType:“application/json;charset=utf-8”,
@Dalorzo我尝试过。。。得到相同的错误。我仍然在Ajax试图进行调用和调用到达代码隐藏方法之间的某个地方得到相同的错误,这会阻止它进行调用吗?是否需要在web.config或任何地方设置某些内容才能做到这一点?我没有做任何这项工作,项目有默认设置?很好。。。它说“试图使用GET请求调用方法'TestMethod',这是不允许的。”不确定这是否有用。您是否已将参数“type”更改为“POST”,如上面的示例所示?它与POST一起工作。然而,我没有发布任何我想要获取数据的数据,所以它不应该被获取吗?例如,我将传入一个ID,它将返回一组基于该ID的数据。您可以像这样隐藏输入上的id:,并在帖子中使用:“data:JSON.stringify({“param”:$(“#sampleId”).val(),”。你明白了吗?
<script>
$('#addButton').click(function () {
            $.ajax({
                type: "POST",
                url: "Search.aspx/TestMethod",
                data: JSON.stringify({ "param" : "anything"}),
                contentType: "application/json",
                dataType: "json",
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
                },
                success: function (result) {
                    alert("We returned: " + result);
                }
            });
        });

</script>