web-dev-qa-db-fra.com

Jquery AJAX avec ASP.NET WebMethod renvoyant la page entière

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;
        }
    }
}
37
Dana

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);
      }
    });
});
20
JoshBerke

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.

9
Dana

Essayez de changer le dernier paramètre "html" en "texte". Ce paramètre spécifie le type de données à renvoyer.

3
rajesh pillai

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;
0
BernieSF