Llamado AJAX desde aspx page

Buenas a todos.

En esta ocasión presentare como llamar a un metodo (WebMethod) en paginas de sitios ASP.NET Web Form, o  mas conocido como "paginas aspx", con la tecnologia AJAX.

Para hacerlo mas simple, el ejemplo lo he realizado todo en un solo archivo, dentro de ella tenemos el front-end y back-end. Como script front uso jquery y como lenguaje back-end, C# (cSharp).

El resultado final es un boton, que al dar click mostrará la hora actual de forma asíncrona usando Ajax.


Ejemplo: nombre de nuestra pagina  ajaxUsingWebMethod.aspx
En primer lugar mostraremos el html de estos pequeños controles
    <div>
        <input type="button" id="btnAjax" value="Call Ajax" />
        <label for="txtOutput">
            Output
                <input type="text" id="txtOutput" />
        </label>
    </div>
: boton llamara al metodo, y el texto mostrara la hora

Ahora vemos nuestro metodo C#
    [System.Web.Services.WebMethod]
    public static string GetTime(string format)
    {
        return DateTime.Now.ToString(format);
    }
: es simple, solo nos devuelve el formato de la hora o fecha (si es que se quiere) del format que se le pasa por parametro
Nota: algunas opciones de "format": HH:mm:ss:fff | dd MM, yyyy | t ... entre otros..

Ahora vamos a lo mas importante, y al motivo de este nueva entrada de blog, ...el "ajax"
            $(document).on('ready', function () {
                $('#btnAjax').on('click', showTime);
            });
: seteo del evento 'click' llamando a la funcion 'showTime'

function showTime() {            
            $.ajax({
                 type: "POST",
                 url: "ajaxUsingWebMethod.aspx/GetTime",
                 contentType: "application/json; charset=utf-8",
                 data: "{ format : 'HH:mm:ss:fff' }"
            }).done(function (data) {
                 $('#txtOutput').val(data.d);
            }).fail(function (data) {
                 console.log(' ERROR :: ', data);
            }).always(function (data) {
                 console.log(' COMPLETE :: ', data);
            });
        }
Analicemos en detalle esto:
$.ajax : es la funcion o metodo de jquery para hacer llamados Ajax
  |- type: (default: GET) verbo HTTP. Tener en cuenta que no todos los browser soportan todos los verbos, Por ejemplo los verb DEL o PUT.
  |- url: url del servicio/metodo
  |- contentType:  (default: 'application/x-www-form-urlencoded; charset=UTF-8') Usado cuando enviamos datos al server, en el cual le decimos el formato/mime enviado. El valor por default es bueno y sirve para la mayoria de los casos.
  |- data : éste es muy importante, y hace referencia al parametro que espera el metodo. Debe ser tal cual el mismo nombre y tipo.

Hay muchos mas, pero quiero solo mostrar un ejemplo basico, y no explayar mucho el tema de las distintas configuraciones del $.ajax.
Luego de ello tenemos los callback (done, fail, always), lo cual tampoco me extendi en explicarlos ya que es muy simple y seguro lo saben.
Solo para este caso, menciono que hoy en dia, se recomienda usar done, fail y always, y no success, error ni complete, estos ultimos estan deprecados (segun jquery)

Resumiendo y finalizando.
Al hacer click al boton, llama al metodo ajax de jquery y este al webMethod del back-end.
Devuelve la hora, o lo que se haya indicado en el formato y los visualiza.

Paso HTML completo.
<%@ Page Language="C#" %>
 
<!-- server -->
<script runat="server">
    [System.Web.Services.WebMethod]
    public static string GetTime(string format)
    {
        return DateTime.Now.ToString(format);
    }
</script>
 
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>| ajax using web method </title>
</head>
<body>
    <div>
        <input type="button" id="btnAjax" value="Call Ajax" />
        <label for="txtOutput">
            Output
                <input type="text" id="txtOutput" />
        </label>
    </div>
 
    <!-- script -->
    <script src="jquery-1.11.1.js"></script>
    <script type="text/javascript">
        (function () {
            /* 'format' could be : 
                - 'HH:mm:ss'
                - 't'  
                - 'dd MM, yyyy' 
                and more...
            */
 
            function showTime() {            
                $.ajax({
                    type: "POST",
                    url: "ajaxUsingWebMethod.aspx/GetTime",
                    contentType: "application/json; charset=utf-8",
                    data: "{ format : 'HH:mm:ss:fff' }"
                }).done(function (data) {
                    $('#txtOutput').val(data.d);
                }).fail(function (data) {
                    console.log(' ERROR :: ', data);
                }).always(function (data) {
                    console.log(' COMPLETE :: ', data);
                });
            }
 
 
            $(document).on('ready', function () {
                $('#btnAjax').on('click', showTime);
            });
 
        })();
 
    </script>
</body>
</html>

Saludos!! :)



Comments

Popular posts from this blog

C# | Extension Methods (Metodos de extension)

Javascript : preventDefault & stopPropagation

HTML5 | Drag & Drop