Llamar a ASP.NET PageMethod / WebMethod con jQuery – devuelve toda la página

jQuery 1.3.2, ASP.NET 2.0. Hacer una llamada AJAX a PageMethod (WebMethod) devuelve la página completa / completa en lugar de solo la respuesta. Un punto de corte en el método de la página muestra que nunca se golpea. Tengo el atributo [WebMethod] en mi método, y es público estático, devuelve cadena y no acepta params. Incluso intenté agregar [ScriptService] en la parte superior de mi clase para ver si me ayudó, pero no fue así.

He visto esta publicación Jquery AJAX con WebMethod de ASP.NET devolviendo toda la página que tenía mis mismos síntomas, pero sigo teniendo un problema. Leí http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ y siento que estoy siguiendo esto a la T, pero todavía no suerte.

La llamada jQuery que estoy haciendo es:

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

Los encabezados de solicitud / respuesta, según Firebug en FF3, son los siguientes

 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; 

He agregado un ScriptManager a mi página solo para ver si me ayudó, pero no hubo suerte allí.

¿Alguna sugerencia?

¿Sabe que los métodos de página funcionan correctamente? Si usa el ScriptManager, ¿funcionan?

Parece que te está faltando una entrada web.config . Específicamente la sección HttpModules.

Me faltaba una línea de mi web.config:

      

Volví a encontrar este problema hoy por una razón diferente: había escrito mal la “aplicación” en

 contentType: 'application/json' 

Y recibía una respuesta de página completa en lugar de una llamada a WebMethod.

Si ha intentado todo eso y todavía obtiene toda la página devuelta del método de su página, puede asegurarse de que no esté utilizando URLs amigables. Si los estás usando, este truco puede ayudarte

Agregue esta línea en su script js antes de realizar la llamada:

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

Lanzando esto aquí como una nota al margen. Estaba obteniendo ese error debido a la longitud de mis variables de cadena en mi cadena HTML y el sitio web que utilicé para llamar mi ajax se veía así.

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

No fue capaz de extraer el enlace .aspx correctamente, así que solo codifiqué mi página web en lugar de usar la loc var.

La mayoría de los escenarios de Ajax que he visto realmente deberían llamar a un servicio web o un manejador de scripts separado, no a una página. Eso es extremadamente fácil de hacer en .net 3-5, no tan fácil en 2-0. Incluso después de averiguar (si) cómo no cargar toda la página, aquí hay razones para no llamar a un método de página:

1) El método de página puede cargar menos cosas que una carga de página completa, pero aún mucho más de lo que necesita para una simple llamada ajax. 2) pésima separación de responsabilidades. Es probable que la página sea la responsable de colocar bien las cosas, no la lógica que estás utilizando en el método ajax.
3) Tal vez necesites un poco de estado de sesión, pero aún debería estar disponible.

Actualmente estoy actualizando mis conocimientos sobre este tema … Buscaré una buena respuesta a esta pregunta en este hilo, o la publicaré la próxima semana. Aquí está la dirección hacia la que me dirijo

1) Envíe JSON del servidor al cliente y use javascript para actualizar su página. – Una variedad de marcos hacen que sea fácil producir JSON desde el servidor web.
2) JQuery hace que las llamadas ajax, el manejo json y la diversión del formateo del cliente, en lugar de ser dolorosa.

Después de casi dos horas y después de haber intentado todo, finalmente lo resolví. @ El comentario de Marvin Zumbado me ayudó. Me faltaba el .aspx de mi url. ¡Sé que este no es mi mejor momento como progtwigdor!