Jquery y Ajax – Invocar métodos compilados de la página .Net
Hace poco había yo publicado un artículo en el que explicaba como utilizar Ajax con JQuery y en aquel artículo había dado como ejemplo llamadas hacia controladores HTTP de ASP .Net, que son documentos con extensión *.ashx. En uno de los comentarios de dicho artículo me hicieron una pregunta, que por cierto creo que es una pregunta típica:
¿Hay forma de NO utilizar ASHX y utilizar WebServices de página?
Sí, la hay, y se hace utilizando JSON para el intercambio de información; y para demostrarlo, en este artículo voy a publicar el mismo ejemplo pero utilizando métodos de la página .Net. Como será el mismo ejemplo, el resultado será el mismo:

Para empezar, debemos crear un nuevo ASP .NET AJAX-Enabled Web Site, que es en realidad un sitio web con el archivo Web.Config modificado para trabajar con ASP .Net AJAX. (obviamente debemos instalarlo antes). Una vez hecho esto. ya podemos empezar a escribir nuestra aplicación.
Ahora crearé el método en la página que será invocado desde JavaScript, para hacerlo, simplemente se define un método como cualquier otro, con la diferencia de que dicho método debe ser público y estático, además, este método debe tener de forma obligatoria el atributo WebMethod() (disponible en el namespace System.Web.WebService), el cual permitirá que dicho método sea accesible por un solicitud HTTP. En resúmen, debe quedar como se muestra en la siguiente imágen:

Ahora que ya tenemos creado un método accesible desde el lado del cliente, vamos a crear el método JavaScript para invocar a dicho método. Esto lo haremos de la siguiente manera:

Como se ve en la imágen, los atributos de ajax en jquery deben ser definidos de la siguiente manera:
- type: Indica que los datos viajarán como parte del cuerpo de la solicitud y no serán visibles en la url.
- dataType: El tipo de dato que Jquery espera como respuesta del servidor.
- contentType: Se usa cuando se desean enviar datos al servidor.
- url: La url hacia donde se van a enviar los datos. En este caso estamos indicando el nombre de la página y seguido del slash (“/”) el nombre del método que queremos invocar. Incluso con este método podremos invocar métodos de otras páginas sin necesidad de cargar toda la página, aunque no recomiendo esto último.
- data: Los datos enviados al servidor. Y como estamos usando json, el formato debe ser {clave:valor, clave:valor}.
- success: Invoca al método que se ejecutará cuando finalice de forma exitosa una llamada a Ajax.
- error: Se desencadena cuando se produce un error en el llamado a ajax.
Bien, espero que me disculpen la demora en escribir este artículo pero estaba un poco ocupado jugando Counter Strike en el trabajo.Yo lo he confesado, antes era fanático de utilizar AjaxPro para mis desarrollos, pero desde que conozco a Jquery Ajax y he aprendido a usarlo, lo utilizo bastante, ya que es más rápido en su desempeño y me permite un mejor control sobre mi código, que es algo que siempre se debe cuidar, además que AjaxPro me generaba algunos archivos adicionales y eso era algo que no me caía bien =P
El código completo y funcionando se encuentra en el archivo a continuación.
Descargar el ejemplo Jquery Ajax WebMethods
Espero que les sea de utilidad.
Saludos.

Xq cuando hago postback me sale error? pero sin el EnableEventValidation=”false”
hola amigo,
esta bueno el articulo, sin embargo me gustaria comentar acerca del tema.
ciertamente ajaxpro genera archivos, pero creo que tiene mas fexilibilidad que jquery.
con ajaxpro puedes manejar tipos de datos de .NET como DS, DT, DView, xml.
con ajaxpro no tienes la limitante de que el metodo deba ser exclusivamente estático.
y por ultimo tampoco se limita a que sea el code behing de la pagina. con ajaxpro puedes invocar metodos publicos y retornar un dataset, datatable, dataview, html. xml
creo que hay mas ventajas. realmente no se si es mas rapidos pero induscutiblemente tiene mas soporte. de hecho estas rapido llenar un grid con ajaxpro que con un updatePanel.
sin embargo eso queda a nuestro gusto. y mas aun en las decisiones de la empresa para la que trabajemos
Saludos.
@roger, ciertamente AjaxPro tiene ventajas y Jquery también, cada uno en su forma, y como dices tu, queda a nuestro gusto y resultado de pruebas la desicion de cual utilizar según el escenario en el que nos encontremos.
Saludos.
h@nz, implemente esto que explicas aqui pero tengo un problemita; al querer registrar los datos del combo que cargo dinamicamente, .NET me toma como que el selectedvalue del combo esta en blanco (no asi Javascript, que si me toma el verdadero valor seleccionado).
Sabras como solucionar este inconveniente?
Muy bueno el articulo, gracias por la explicacion
Saludos
hola, yo tampoco puede recoger el valor seleccionado en el combo, devuelve que el selectedvalue esta en blanco, sin embargo en javascript si que veo el valor seleccionado, pero al hacer el postback ese dato se pierde.
Hay alguna forma de solucionar esto?
gracias,
Saludos
No funciona en .net 1.1
.
Alguien me podría colaborar indicandome como hacerlo en dicha versión del framework?