从jquery调用json webservice时出错

时间:2011-04-05 20:38:32

标签: jquery ajax json service

我已经搜索谷歌寻找同样的问题,我似乎找不到任何帮助。任何帮助表示赞赏。我在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<string> text_list = new List<string>();
        List<string> value_list = new List<string>();

        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调用该方法:

      <script type="text/javascript">
        $(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);
                  }  
              });   
            });

        }); 
    </script>

如果我直接转到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“}

关于问题的任何想法?

4 个答案:

答案 0 :(得分:4)

我明白了!

这是我必须做的。在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的解决方案!

答案 1 :(得分:2)

使用:

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

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

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

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

答案 2 :(得分:1)

我认为你也需要这样做:

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

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

答案 3 :(得分:0)

看起来有点像这个问题,我认为:
Using JQuery to call a WebMethod