Ошибка при вызове веб-службы json из jquery - PullRequest
0 голосов
/ 06 апреля 2011

Я искал в Google ту же проблему и, похоже, не могу найти никакой помощи. Любая помощь приветствуется. Я создал asmx веб-службы в C #:

    [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": "Была сделана попытка вызвать метод \ u0027GetList \ u0027 с использованием запроса POST, что недопустимо.", "StackTrace": "at System.Web.Script.Services.RestHandler.GetRawParams (WebServiceMethodData methodData, контекст HttpContext) \ r \ n в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext context, WebServiceMethodData methodData) "," ExceptionType ": 101. System.InvalidOperation

Есть идеи, в чем может быть проблема?

Ответы [ 4 ]

4 голосов
/ 06 апреля 2011

Я понял это!

Вот что я должен был сделать. В 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 за решение!

2 голосов
/ 06 апреля 2011

Использование:

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

Вам также необходимо передать данные в правильном формате json.Для проверки значения параметра данных вы можете использовать JSON Lint .Измените его следующим образом:

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

Обратите внимание на использование двойных кавычек.Кроме того, передавая данные в виде строки, вы обходите сериализацию данных jQuery.

1 голос
/ 06 апреля 2011

Я думаю, вам тоже нужно это сделать:

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

Мне всегда приходилось делать это с jquery при вызове веб-служб ASP.NET.

0 голосов
/ 06 апреля 2011

Похоже на этот вопрос, я думаю:
Использование JQuery для вызова WebMethod

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...