37 votes

Appelez ASP.NET PageMethod / WebMethod avec jQuery - retourne la page entière

jQuery 1.3.2, ASP.NET 2.0. Faire un appel AJAX vers un PageMethod (WebMethod) retourne la totalité du/de la page entière, au lieu de simplement la réponse. Un point d'arrêt sur la page de la méthode montre qu'il n'est jamais touché. J'ai l' [WebMethod] attribut sur ma méthode, et il est public static, renvoie la chaîne et n'accepte pas de paramètres. J'ai même essayé d'ajouter [ScriptService] en haut de ma classe pour voir si ça aide, mais il n'a pas.

J'ai vu ce post http://stackoverflow.com/questions/348689/jquery-ajax-with-asp-net-webmethod-returning-entire-page qui m'a même symptômes, mais je suis encore avoir un problème. J'ai lu http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ et je sens que je suis en suivant cet T, mais toujours pas de chance.

Le jQuery appel, je suis en train de faire est:

jQuery.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: '{}',
    dataType: 'json',
    url: 'MyPage.aspx/SomePageMethod',
    success: function(result){
        alert(result);
    }
});

La demande/en-têtes de réponse, comme par Firebug dans FF3, sont comme suit

Response Headers
Server  ASP.NET Development Server/8.0.0.0
Date    Tue, 24 Feb 2009 18:58:27 GMT
X-AspNet-Version    2.0.50727
Cache-Control   private
Content-Type    text/html; charset=utf-8
Content-Length  108558
Connection  Close

Request Headers 
Host    localhost:2624
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Accept  application/json, text/javascript, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  300
Connection  keep-alive
Content-Type    application/json; charset=utf-8
X-Requested-With XMLHttpRequest
Referer http://localhost:2624/MyApp/MyPage.aspx
Content-Length  2
Cookie  ASP.NET_SessionId=g1idhx55b5awyi55fvorj055;

J'ai ajouté un ScriptManager à ma page, juste pour le plaisir, pour voir si ça aide, mais pas de chance là-bas.

Toutes les suggestions?

28voto

Dave Ward Points 36006

Savez-vous que les méthodes de page fonctionnent correctement? Si vous utilisez le ScriptManager fonctionnent-ils?

Il semble que vous manquiez peut-être une entrée web.config . Plus précisément la section HttpModules.

13voto

Matt Points 15107

J'ai rencontré ce problème à nouveau aujourd'hui pour une raison différente: j'avais mal orthographié "application" dans

 contentType: 'application/json'
 

Et recevait une réponse pleine page au lieu d'un appel à WebMethod.

7voto

Marvin Zumbado Points 66

Si vous avez essayé tout cela et que la page entière est toujours renvoyée par votre méthode de page, vous pouvez vous assurer que vous n'utilisez pas d'URL conviviales. Si vous les utilisez, cette astuce peut vous aider

Ajoutez cette ligne sur votre script js avant de faire l'appel:

 PageMethods.set_path(PageMethods.get_path() + '.aspx');
 

1voto

user617268 Points 11

Jeter ceci ici comme note secondaire. J'obtenais cette erreur en raison de la longueur de mes variables de chaîne dans ma chaîne HTML et le site Web que j'utilisais pour appeler mon ajax ressemblait à ceci.

 loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc;
        $.ajax({
            type: "POST",
            url: loc + "/" + methodName,
            data: "{" + args + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: onSuccess,
            error: onFail
        });
 

Il n'était pas capable d'extraire correctement le lien .aspx, j'ai donc codé en dur ma page Web au lieu d'utiliser la loc loc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X