Je fais quelques tests simples (en préparation d'un projet plus important) pour appeler un WebMethod ASP.NET à l'aide de JQuery AJAX. Dans mon exemple, mon WebMethod renvoie une chaîne simple. Cependant, lorsque j'essaie de l'appeler à l'aide de JQuery, j'obtiens le contenu complet de la page HTML renvoyé au lieu de seulement ma chaîne. Qu'est-ce que je rate?
Côté client :
$(document).ready(function ready() {
$("#MyButton").click(function clicked(e) {
$.post("Default.aspx/TestMethod",
{name:"Bob"},
function(msg) {
alert("Data Recieved: " + msg);
},
"html"
);
});
});
Du côté serveur:
using System;
using System.Web.Services;
namespace JqueryAjaxText
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string TestMethod(string name)
{
return "The value submitted was " + name;
}
}
}
Consultez ce lien. J'ai utilisé certains de ses autres postes pour appeler le service WCF avec succès. N'oubliez pas de consulter les articles connexes:
http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/
Lisez l'article, mais c'est essentiellement:
$("#Result").click(function() {
$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#Result").text(msg.d);
}
});
});
Je pense que je devenais confus avec le paramètre "type" dans la commande $ .post de JQuery. Après avoir parlé à certaines personnes, il semble que le type de retour pour appeler un WebMethod DOIT être "json". J'essayais d'utiliser "html". Une fois que je l'ai changé en "json", puis tout a fonctionné comme d'habitude. Donc, apparemment, une méthode décorée avec [WebMethod] renvoie uniquement JSON, et c'est là que se trouvait mon blocage.
Merci de vos réponses les gars.
Essayez de changer le dernier paramètre "html" en "texte". Ce paramètre spécifie le type de données à renvoyer.
J'ai eu exactement le même problème: WebMethod a renvoyé la page HTML entière à la place des données prévues. Pour moi, la solution est venue de changer l'intérieur ~/App_Start/RouteConfig.cs la ligne suivante:
settings.AutoRedirectMode = RedirectMode.Permanent;
à
settings.AutoRedirectMode = RedirectMode.Off;