Erreur lors de l’appel d’un service Web JSON à partir de jQuery

J’ai parcouru Google à la recherche du même problème et je n’arrive pas à trouver d’aide. Toute aide est appréciée. J’ai créé un service Web asmx en C #:

[WebMethod] [ScriptMethod()] public ListObj GetList(ssortingng ListName) { SqlConnection DBConnection = new SqlConnection(); DBConnection.ConnectionSsortingng = ConfigurationManager.ConnectionSsortingngs["SiteSqlServer"].ToSsortingng(); 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"].ToSsortingng()); value_list.Add(DBReader["Value"].ToSsortingng()); } DBConnection.Close(); return new ListObj(text_list, value_list); } 

J’essaie d’appeler cette méthode en utilisant 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); } }); }); });  

Si je vais directement à l’asmx, je peux saisir ma chaîne et récupérer les données, pas de problème: http://screencast.com/t/JQmHYoz5c http://screencast.com/t/xDuMJe7v1A

Cependant, l’appel ajax ci-dessus renvoie une erreur:

{“Message”: “Une tentative d’appel de la méthode \ u0027GetList \ u0027 a été effectuée à l’aide d’une requête POST, ce qui n’est pas autorisé.”, “StackTrace”: “dans System.Web.Script.Services.RestHandler.GetRawParams (WebServiceMethodData methodData , Contexte HttpContext) \ r \ n sur System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (contexte HttpContext, méthode WebServiceMethodData), “ExceptionType”: “System.InvalidOperationException”}

Des idées sur ce que le problème peut être?

Je l’ai compris!

Voici ce que je devais faire. Dans le jQuery j’avais besoin de ceci:

  $("#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); } }); }); 

Notez les données et les parameters de type. Et dans le C # j’avais besoin de changer

 [ScriptMethod()] 

à

 [ScriptMethod] 

Merci à @peanutbutter_lou pour la solution!

Utilisation:

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

Vous devez également transmettre les données au format JSON approprié. Pour vérifier la valeur du paramètre data, vous pouvez utiliser JSON Lint . Changez-le comme ça:

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

Notez l’utilisation de guillemets doubles. De plus, en transmettant les données sous forme de chaîne, vous contournez la sérialisation des données jQuery.

Je pense que vous devez faire cela aussi:

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

J’ai toujours eu à le faire avec jquery lorsque j’appelais des services Web ASP.NET.

Ça ressemble un peu à cette question, je pense:
Utilisation de JQuery pour appeler une méthode Web