从jquery调用json webservice时出错

我已经搜索谷歌寻找同样的问题,我似乎找不到任何帮助。 任何帮助表示赞赏。 我在C#中创建了一个web服务asmx:

[WebMethod] [ScriptMethod()] public ListObj GetList(string ListName) { SqlConnection DBConnection = new SqlConnection(); DBConnection.ConnectionString = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ToString(); SqlDataReader DBReader = null; SqlCommand query = new SqlCommand("SELECT Lists.Text, Lists.Value FROM Lists WHERE ListName = '" + ListName + "'", DBConnection); List text_list = new List(); List value_list = new List(); DBConnection.Open(); DBReader = query.ExecuteReader(); while (DBReader.Read()) { text_list.Add(DBReader["Text"].ToString()); value_list.Add(DBReader["Value"].ToString()); } DBConnection.Close(); return new ListObj(text_list, value_list); } 

我试图使用jquery调用该方法:

   $(document).ready(function () { $("#JoeTest").click(function () { $.ajax({ type: "POST", url: "/Portals/0/DnnListService.asmx/GetList", data: {ListName: 'TestList'}, contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { alert("Success: " + msg); }, error: function (msg) { alert("Failed: "+ msg.status + ": " + msg.statusText); } }); }); });  

如果我直接进入asmx,我可以输入我的字符串并获取数据,没问题: http : //screencast.com/t/JQmHYoz5c http://screencast.com/t/xDuMJe7v1A

但是,上面的ajax调用返回错误:

{“Message”:“尝试使用POST请求调用方法\ u0027GetList \ u0027,这是不允许的。”,“StackTrace”:“在System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData) ,HttpContext context)\ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)“,”ExceptionType“:”System.InvalidOperationException“}

有关问题的任何想法?

我想到了!

这是我必须做的。 在jQuery我需要这个:

  $("#JoeTest").click(function () { $.ajax({ type: "POST", url: "/Portals/0/DnnListService.asmx/GetList", data: '{ ListName: "TestList" }', contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { alert("Success: " + msg); }, error: function (msg) { alert("Failed: "+ msg.status + ": " + msg.statusText); } }); }); 

注意数据和类型参数。 而在C#我需要改变

 [ScriptMethod()] 

 [ScriptMethod] 

感谢@peanutbutter_lou的解决方案!

使用:

  $.ajax({ type: "GET", ... }); 

您还必须以正确的json格式传递数据。 要validationdata参数的值,可以使用JSON Lint 。 像这样改变它:

 data: '{"parameter1" : 1, "parameter2": "string" }' 

注意使用双引号。 此外,通过将数据作为字符串传递,您可以绕过jQuery数据序列化。

我想你也需要这样做:

  $("#JoeTest").click(function () { $.ajax({ ... data: "{'ListName': 'TestList'}", ... }); }); 

在调用ASP.NET Web服务时,我总是不得不使用jquery。

看起来有点像这个问题,我想:
使用JQuery调用WebMethod