Appelez ASP.NET PageMethod / WebMethod avec jQuery – renvoie la page entière

jQuery 1.3.2, ASP.NET 2.0. Passer un appel AJAX à un PageMethod (WebMethod) renvoie la page entière / entière au lieu de la seule réponse. Un point d’arrêt sur la méthode de la page indique qu’il ne sera jamais touché. J’ai l’atsortingbut [WebMethod] sur ma méthode; il s’agit d’ un statique public, qui retourne une chaîne et n’accepte aucun paramètre. J’ai même essayé d’append [ScriptService] au sumt de ma classe pour voir si cela aidait, mais cela ne fonctionnait pas.

J’ai vu cette publication Jquery AJAX avec ASP.NET WebMethod renvoyer la page entière qui avait mes mêmes symptômes, mais j’ai toujours un problème. Je lis http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ et j’ai l’impression de suivre cela au T, mais toujours pas la chance.

L’appel jQuery que je passe est le suivant:

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

Les en-têtes de demande / réponse, selon Firebug dans FF3, sont les suivants

 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 uniquement pour vérifier si cela aide, mais pas de chance là-bas.

Aucune suggestion?

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

    Il semble qu’il vous manque une entrée web.config . Plus précisément la section HttpModules.

    Il me manquait une ligne de mon web.config:

          

    J’ai rencontré ce problème à nouveau aujourd’hui pour une autre raison: j’avais mal orthographié “application” dans

     contentType: 'application/json' 

    Et obtenait une réponse d’une page entière au lieu d’un appel à WebMethod.

    Si vous avez essayé tout cela et que vous obtenez toujours la page entière renvoyée par votre méthode de pagemethod, 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'); 

    Jeter ceci ici comme note de côté. Je recevais cette erreur en raison de la longueur de mes variables de chaîne dans ma chaîne HTML et le site Web sur lequel je m’appelais ajax s’appelait ainsi.

     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, aussi j’ai simplement codé ma page Web en dur au lieu d’utiliser la variable loc.

    La plupart des scénarios ajax que j’ai vus devraient vraiment appeler un service Web ou un gestionnaire de script distinct, pas une page. C’est extrêmement facile à faire en .net 3-5, pas si facile en 2-0. Même après avoir compris (si) comment ne pas charger la page entière, voici des raisons de ne pas appeler une méthode de page:

    1) La méthode page peut charger moins de choses qu’un chargement de page complet, mais bien plus que ce dont vous avez besoin pour un simple appel ajax. 2) séparation moche des responsabilités. La page est probablement responsable de la mise en page agréable, pas de la logique que vous utilisez dans la méthode ajax.
    3) Peut-être avez-vous besoin d’un état de session, mais celui-ci devrait toujours être disponible.

    Je suis actuellement en train de mettre à jour mes connaissances sur ce sujet … Je vais chercher une bonne réponse à cette question dans ce fil, ou j’en posterai une la semaine prochaine. Voici la direction que je suis dirigé

    1) Envoyez le fichier JSON du serveur au client et utilisez javascript pour mettre à jour votre page. – une variété de structures facilitent la production de JSON à partir du serveur Web.
    2) JQuery rend les appels ajax, la manipulation json et le formatage du client amusants, au lieu de douloureux.

    Après presque deux heures et après avoir tout essayé, j’ai finalement résolu le problème. @ Le commentaire de Marvin Zumbado m’a aidé. Il me manquait le .aspx de mon URL. Je sais que ce n’est pas mon meilleur moment en tant que programmeur!