Studio Press

Just another Blogger Blog

ad

Crear Combos Dinámicos con Ajax

¿Como lleno dinámicamente un combo y lo hago dependiente de otro?

En algun momento de las aplicaciones uno necesita la funcionalidad de hacer combos dependientes de determinada información, cada combo se debe llenar dinamicamente con consultas a la base de datos.

Bien, empecemos con la parte del cliente, como ir generando los tags correspondientes asi como sus rutinas para llenarlos, al último haremos un ejemplo con las rutinas de llamado al server.

Lo primero: crear la forma para los tags en html:

<form id="Actividades">
<table id="TableContent" style="width: 758px; " border="1">
<tr><td style=" width:40%;"><select Class="dDList" id="MP" style="width:200px;" onactivate="GetMP(this);" onchange="ChangeMP();" > <option >Seleccione uno</option></select></td>
<td style=" width:40%;"><select Class="dDList" style="width:200px;" id="PKT" onchange="ChangePKT();"><option >Seleccione uno</option></select></td>
<td style=" width:20%;"></td></tr>
<tr><td style=" width:40%;"><select Class="dDList" id="PRJ" style="width:200px;" onchange="ChangePRJ();"><option value="hola">Seleccione uno</option></select></td>
<td style=" width:40%;"><select Class="dDList" style="width:200px;"id="ACT" onchange="ChangeACT();"><option value="hola">Seleccione uno</option></select></td>
<td style=" width:20%;"></td></tr>
<tr><td colspan="3" style=" height:400px; text-align:center; overflow-y:auto; vertical-align:top;">
<div id="Grid" style="width:95%; border-color:AliceBlue; overflow-y:auto;">h</div></td></tr>
<tr></tr>
</table>
</form>


Despues la rutina de llenado, solo explicaremos una, en el ejemplo hay 4.


function GetMP(combo)
{
//LIMPIANDO EL SELECTBOX
combo.options.length = 0;
document.forms['Actividades'].PKT.disabled=true
document.forms['Actividades'].PRJ.disabled=true
document.forms['Actividades'].ACT.disabled=true
for (i=1;i<4; i++) combo.add(getOption(i,"MASTERPLAN_"));
}

function getOption(indice,combo)
{
var opt = document.createElement('option');
opt.value =indice;
opt.text = combo+indice;
return opt;
}


Con estas dos funciones basicamente llenamos el combo, la segunda función va creando los elementos de opcion al vuelo, le mandas el indice y el tag donde se agregará la opción, en la primer función deshabilitas los combos dependientes y llenas en un ciclo el combo.


Que pasa cuando seleccionas una opción del primer combo seleccionado?, pues debes obtener el indice y valor de esa opción para enviarla como parámetro de la consulta siguiente , por tanto hay que habilitar el combo siguiente y hacer el proceso de llenado tal como se explicó en la seccion anterior, y asi sucesivamente, para los demás.


function ChangeMP()

{
document.forms['Actividades'].PKT.disabled=false;
//OBTENER EL INDICE
var indx= document.forms['Actividades'].MP.selectedIndex;
//OBTENER EL VALOR DEL ELEMENTO
var valor=document.forms['Actividades'].MP.options[indx].value;
var texto=document.forms['Actividades'].MP.options[indx].text;
//alert( valor+"\n"+texto);
//LLENA LOS PAQUETES
document.forms['Actividades'].PKT.options.length = 0;
for (i=1;i<6; i++) document.forms['Actividades'].PKT.add(getOption(i,"PAQUETE_"));
}

Hasta ahora lo llenamos manualmente, pero hay que hacer las consultas necesarias para que funcione, bien hay que declarar el namespace en en el codebehind cs de nuestra página, este ejemplo es para Punto net en c#, pero la idea funciona para otros lenguajes, aqui haermos uso del ayaxpro, pero puede hacerce de manera simple con un objeto xmlhttprequest (explicado en otro artículo).


function FILLMP(combo)

{
//LIMPIANDO EL SELECTBOX
combo.options.length = 0;
document.forms['Actividades'].PRJ.disabled=true;
document.forms['Actividades'].ACT.disabled=true;
//LLENANDO EL COMBO
Arr=AdmActividades.GetMP().value;
if(Arr!="Error De consulta")
{
var Index=GetIndx(Arr);
var Vals=GetVal(Arr);
var Txts=GetTxt(Arr);
FillOptions(combo,Index,Vals,Txts)
}
}

La redaccion es casi igual hasta la parte de llenado del combo donde enAdminActividades es el namesspace , seguido del metodo GetMp() para obtener un arreglo de la consulta en le server.



[AjaxPro.AjaxMethod()]
public string GetMP()
{
string arr = "";
DataSet ds = new DataSet();
MasterPlan = new clsMasterPlan();
try { ds = MasterPlan.ObtieneMP(); }
catch { arr = "Error De consulta"; }
if (ds != null) { arr = GetArreglo(ds,0,5); }
//REGRESA UN ARREGLO DE LOS ID DE LOS MASTERPLAN y TEXTOS
return arr;
}

En este ejemplo lo regresamos en un string pero podemos regresarlo en un dataset también, bien esa parte de la consulta cada quien sabe como la llenará , aqui solo explico el vínculo entre server-cliente.

Para hacer uso del ayaxpro, ver el artículo de como ambientar.

para el ejemplo del html aqui.
para el ejemplo en html y punto net aspx

De reconocer algun error, ya ambientado correctamente, enviar un nota, Gracias.

Ejemplo con Framework de Ajax

Para entender este ejercicio te recomendaría empezar con los artículos anteriores sobre lo que es ajax y sus principios básicos, aqui daremos por explicados esos principios, explicaré cada parte del ejemplo sin detallar todo sin embargo podrás descargarlo para probarlo.

Primero te dire que existen multiples framework para emplear ajax, algunos libres, otros no, no detallaré todos los que existen pero si te diré con el que he probado y si ha funcionado, es el AjaxPro, se que haz estado tentado a usar las utilerías de Microsoft, te compartiré mi experiencia al respecto y es que para empezar la instalación y la implementación no son claras ni transparentes, el uso de sus componentes implica mucho código adicional no controlable, en resumen no tienes mucho control y mucho trabajo en el aspx, y si trabajas limpio no debes abusar de esta parte.

Explicado lo anterior comenzaré explicando paso a paso lo que debes hacer para implementar:

Primero Bajar el framework, es decir una dll que añadirás al bin para hacer básicamente el vínculo entre la parte del cliente y servidor y crear los objetos xmlhttprequest necesarios asi como usar las propiedades y metodos del framework, dicho framework lo encontrarás en www.ajaxpro.info, claro que en esa página hay un buen de ejercicios, sin embargo en esta parte lo resumimos y lo empleamos que parece juego de niños.

Segundo: Supongo ya tienes un par de páginas y clases donde quieres poner en práctica esto, por ello debes crear al menos una para probar, seguido de ello agregar la dll que acabas de bajar como una referencia haciendo click derecho en la carpeta bin y buscarlo como proyecto, hay varias dll segun tu framework que tengas instalado en máquina o servidor, escoge la que se ajuste.

Tercero: Si ya hiciste una prueba de tu página, ya generaste tu web config, de no ser asi, hazlo porque necesitamos agregar unas líneas para reconocer el framework, de no hacerlo te marcará errores de javascript que no encontrarás. Bien si ya tienes tu web config, debes agregar estas lineas justo antes de cerrar el bloque del system web.

<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>

Cuarto: En tu code behind ( página.cs) harás la declaración del namesspace para ver los metodos y propiedades del server desde el cliente y asi mandar a ejecutarlos, si no haces esto no establecerás el vínculo o mejor dicho el Ajax Engine, la pregunta es dónde y que pongo, bien la respuesta es esta: lo vas a poner justo antes de la declaracion de la la clase principal de la página, he aqui mas o menos como.

using System.Xml.Xsl;
using System.Xml.XPath;
//REGISTRAR EL NAMESPACE DONDE ESTARAN LAS FUNCIONES LLAMADAS DESDE EL CLIENTE
[AjaxPro.AjaxNamespace("AyaxExample")]
public partial class db1 : System.Web.UI.Page
{

Quinto: En la sección del page Load, harás la declaración de emplear las herramientas del framework del ayax, bien la declaración es simple como esta:

protected void Page_Load(object sender, EventArgs e)
{
//REGISTRAR EL USO DEL COMPONENTE EN ESTA PAGINA
AjaxPro.Utility.RegisterTypeForAjax(typeof(db1));
}

Sexto: Declarar que el siguiente metodo puede ser visto del lado del cliente y lo puede mandar a ejecutar, si preguntas si le puedes enviar parámetros, la respuesta es si, puedo decir que tus metodos tienen propiedades privadas, publicas etc.. añadiria ahora una mas, publica desde el cliente, bueno lo que hay que hacer es esto justo antes del método.

//METODO LLAMADO DESDE EL CLIENTE
[AjaxPro.AjaxMethod()]
public string PrintTabla()
{

Y esto lo que respecta a la parte del código en C# del Code Behind de tu página, estos pasos son religiosos para poder usar el framework, lo que continua es la parte en el cliente sobre lo que deseas que ocurra , es decir , recargar la parte deseada sin recargar toda la página.

Ejercicio.

Necesitaremos de un archivo XML que consultaremos, esta de mas decir que podemos hacer aqui justamente las consultas base de datos.

Empezamos con una sencilla funcion en el cliente para actualizar una consulta de datos existente en un div.

//FUNCION PARA SOLICITAR CONSULTA EN UN METODO EJECUTADO EN EL SERVER
function GetTabla()
{
var resultado;
//LLAMAR AL METODO EN EL SERVER
//NAMESSPACE.METODO(ARGUMENTOS)
resultado=AyaxExample.PrintTabla().value;
//ELEMENTO DONDE PEGAREMOS EL RESULTADO
var div=document.getElementById("Content");
div.innerHTML=resultado;
}

Como podemos observar, alojamos en una variable el resultado de la ejecución del método en el cliente y simplemente pegamos ese resultado en un div, actualizando solo parte deseada, la implementación es muy corta en esta parte.

A continuación la parte del cliente donde se muestra los controles :

<form id="form1" runat="server">
<div>
<asp:Label ID="Bienvenida" runat="server" BorderStyle="None" Font-Bold="True" ForeColor="Red">Ejemplo de uso de ayax Framework</asp:Label><br />
<asp:Button ID="Recarga" runat="server" OnClick="Recarga_Click" Text="Reiniciar" /><br />
<br />
</div>
<div id="Content" title="Click" onclick="GetTabla()" style="text-align:center;">Div de Contenido</div>
</form>


Y es todo de la parte del cliente, lo que sigue es en el servidor y son la tareas de petición del método, solicitud de consulta y presentación de los datos a regresar.

A partir de un archivo Xml, llenamos un data set , aqui es la oportunidad de realizar consultas a la base de datos y llenar los dataset a partir de stores o querys abiertos, bueno no abundaré en esa parte, solo tomamos como ejemplo este xml para ello, asi:

string XmlFile = Server.MapPath("/AyaxFramework/App_Data/Pets.xml"); //"D:\\xml\\petlist.xml";
string dato = "";
DataSet ds = new DataSet();
//LLENAR DATASET CON ARCHIVO XML
ds.ReadXml(XmlFile);

A contunuación le damos formato a los datos, en este caso se trata de una tabla y empezamos con los cabeceros que extraimos del dataset.

//LLENA CABECERA DE LA TABLA
sb.Append(" <table border='1'><thead style='color:Red;' >");
sb.Append("<tr>");
for (int h = 0; h < ds.Tables[0].Columns.Count; h++)
sb.Append("<td>" + ds.Tables[0].Columns[h].Caption + "</td>");
sb.Append("</tr></thead>");

//LLENAR CONTENIDO DE LA TABLA

Lo que sigue es llenar el contenido de la tabla y regresar el resultado de la consulta:

for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
{
sb.Append("<tr style='color:Silver;'>");
for (int c = 0; c < ds.Tables[0].Columns.Count; c++)
{
dato = ds.Tables[0].Rows[r].ItemArray[c].ToString();
if (dato == "") dato = " ";
sb.Append("<td>" + dato + "</td>");
}
sb.Append("</tr>");
}
sb.Append("</table>");
return sb.ToString();

Esto es el ejemplo completo de lo anteriormente indicado, esta el projecto completo asi como la dll del framework , solo para probar y ya, las alternativas son muchas pero he aqui un ejemplo sencillo y todos los pasos que se obvian en muchos casos y no se explican.

Ejemplo.

Autocompletar Forma.

Una de las formas más comunes hoy, es llamar a consultas ocultas sin refrescar la página. Esta parte del proceso se puede hacer con código Javascript, para este ejemplo solo hecho en html y con unos datos en código será suficientes para abordar después el empleo del framework Ayaxpro en nuestra apllicación.

Lo primero es el uso de una forma de captura y su respectiva etiqueta sobre lo que se refiere, se supone, a partir de la primera letra escrita debe autosugerirnos varias opciones, tal como lo hacen las aplicaciones como el buscador de yahoo.La siguiente parte será creada en la página Hhml de trabajo, solo expongo la parte escencial, sabemos que hay más código, por el momento esto es lo importante.

Teclee un email que empiece con g






Lo segundo es crear un arreglo de datos que podamos mostrar, ese arreglo estará en el código de Javascript para efectos de este ejemplo y después emplearlo en aplicaciones con ayax en C# u otro lenguaje dado esta parte es universal.

var emailAddresses = [
"greenarrow@justiceleague.xmp",
"greenflame@justiceleague.xmp",
"greenhornet@dccomics.xmp",
"greenlantern@justiceleague.xmp",
"magneto@example.net",
"mistermiracle@justiceleague.xmp",
"redronin@sitepoint.com",
"redtornado@justiceleague.xmp"
];

Posteriormente creamos nuestra función autocomplete en javascript, en esta parte obtenemos el elemento de la forma previamente creado en la página HTML

var email = document.getElementById("email");
email.setAttribute("autocomplete", "off");
attachEventListener(email, "keydown", keydownAutoComplete, false);
attachEventListener(email, "blur", blurAutoComplete, false);
return true;

En este mismo código Javascript debemos incluir una función que implique el uso de las teclas una vez situados en las formas, bien cuales teclas hay que considerar pues son estas:

case 8: // backspace
case 9: // tab
case 13: // enter
case 16: // shift
case 17: // ctrl
case 18: // alt
case 20: // caps lock
case 27: // esc
case 33: // page up
case 34: // page down
case 35: // end
case 36: // home
case 37: // left arrow
case 39: // right arrow
case 38: // up arrow
case 40: // down arrow
case 46: // delete

Solo haremos énfasis de las teclas arriba y abajo para para selccionar la opcion, las demas por mientras no nos interesa hagan algo, entonces parte importante de la funcionalidad está en los casos de las teclas 38 y 40 que servirán para acentuar la opcion recorrida por la tecla entre otras cosas.

Siguiente paso debe crearse un función de para generar una cortina con las opciones consultadas y marcada con otro color la opción escogida.

En esta parte nuevamente tomamos el elemento de la forma de entrada, y crearemos otro elemento al vuelo y lo configuraremos , para finalmente agregarlo como elemento hijo del que tomamos originalmente esto con el fin de crear la cortina justo bajo el elemento de la forma.

var input = document.getElementById("email");

var newUl = document.createElement("ul");
newUl.setAttribute("id", "autoCompleteDropdown");
newUl.autoCompleteInput = input;
newUl.style.position = "absolute";
newUl.style.left = getPosition(input)[0] + "px";
newUl.style.top = getPosition(input)[1] + input.offsetHeight - 2 + "px";
newUl.style.width = input.offsetWidth - 3 + "px";

Finalmente crar otras funciones entre ellas las desaparecer la cortina de elementos, removiendo el elemento adjunto al de la forma original.


var autoCompleteDropdown = document.getElementById("autoCompleteDropdown");

if (autoCompleteDropdown != null)
{
autoCompleteDropdown.parentNode.removeChild(autoCompleteDropdown);
}

Una parte muy importante esta dada por el código de CSS , crear los estilos para cada elemento por ejemplo:

#autoCompleteDropdown

Y asi cada uno, de cualquier forma pensarás que bién todo esto pero sin el código completo son ideas perdidas e inconexas, he aquí la solución.

O tambien Archivo js.
Archivo Css.

Ajax desde el principio.

Introducción.

Hoy las aplicaciones mas robustas de la web emplean en sus desarrollos Ajax en asp net 2.0, uno de ellos es Google .

Si no estas enterado de este tema, debes hacerlo lo mas pronto posible antes de quedarte sin trabajo o que otros te ganen la inovación en tu empresa.

Piensa en esto como usuario que al seleccionar un combo tengas que ver que la página se recarga totalmente, que molesto ver un pantalla blanca que no sabes si se pasmo, esta lenta la red o ya la consulta se cayó, entonces imagina, bueno no lo imagines ve algunas aplicaciones en la web que recargan solo segmentos de la pagina y ves un flujo mas limpio.

Una de las batallas en punto net es la parte de la recarga y ni modo tienes que manejar muy bien el Page_PreRenderComplete y el Page.IsPostBack y te platico la peor parte, si tienes un Datasource ligado directamente a los controles , si que sufrirás, pues resulta que en un grid cada vez que cambias la paginación del grid vuelve a realizar la consulta y todo se recarga por un evento que debiera de ser ligero, pero no lo es.

Pero estas cosas no son tu culpa pues los controles están mal diseñados desde el inicio y haces trucos para hacerlo funcionar lo mas limpio posible.

¡Para de sufrir!, te digo que hay una alternativa AJAX, sin embargo debes tomar en cuenta que debes empezar con este concepto y te ahorrarás mucho tiempo, generando código más legible, rápido y funcional, una vez que entiendas como funciona el principio básico, lo demás será pan comido.

Piensa como usuario y como te gustaría que funcionen las cosas, si actualizas contenidos robustos, vendes en línea esto es para ti, dale una experiencia diferente a tu usuario, no te quedes fuera, piensa que los cambios a la aplicación serán mas rápidos separando ciertas estructuras, quedando un código limpio y fácil de seguir, también la cantidad de trafico entre cliente servidor disminuirá.

Pero no todo es bello, piensa que pasará cuando des back en el navegador, puede funcionar erraticamente y si deseas que tu contenidos sean considerados en las búsquedas, pues como están ocultas hasta que haya un usuario que genere un evento, ese contenido NO existirá y ahí no fue negocio, por otro lado los servidores de consulta son sencibles a inyección de código, por ello hay que tener cuidado y ser cauto en donde emplearlo y tomar las medidas correspondientes, no puedes emplearlo indiscriminadamente.

Lo Básico.


Comencemos con el significado del acrónimo (Asynchronous Javascript and XML), el término "asíncrono" - en otras palabras, ¡Vamos a hacer un viaje de ida y vuelta al servidor, sin necesidad de ir allí!.

Es entonces el empleo de un engine en tu aplicación, un concepto empleando ciertas técnicas mas que un componente o tecnología nueva, porque no hay nada nuevo en esto, recordemos como le hacemos para tener cierta comunicación desde el cliente con el servidor empleando iframes ocultos guardando información en formas o tags y recuperandola en el cliente actualizando los contenidos de los divs o cualquier forma predispuesta para tal efecto.

Explicado lo anterior como contexto, hay muchas formas de implementar este engine en nuestra aplicación mediante Frameworks prediseñados por fabricantes que lo ponen libre o con costo de licencias. En este capitulo me referiré a la creación inicial que necesitaremos para desarrollar. Se que estas tentado a emplear el ajax extensions de Microsoft, te digo Alto, no necesariamente es lo mejor, pues hay varios puntos de instalación y de uso que no te van a satisfacer y generarás código adicional.

Lo primero que debemos saber es el empleo de Javascript en el cliente y el lenguaje que mejor te parezca en el server, debes saber que emplearas ciertas reglas del protocolo de XML y pensar en una forma diferente como estructuras tus páginas para emplear este concepto.

Código Básico.

Primero.

Lo primero que debes saber es que tienes que crear un objeto del tipo XMLHTTP que se puede usar desde el 2001, para ello es necesario conocer que versión esta existe en el navegador del cliente, existen varias, MSXML2.XMLHTTP.5.0, MSXML2.XMLHTTP.4.0, MSXML2.XMLHTTP.3.0, MSXML2.XMLHTTP y Microsoft.XMLHTTP.
A partir de esto debes crear el objeto y regresar como resultado el objeto, en una función , algo si como esto.

function createXMLHTTP()
{
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i=0; i <>
{try{
var oRequest = new ActiveXObject(arrSignatures[i]);
return oRequest;} catch (oError) { }
} throw new Error("MSXML No esta instalado en su sistema");
}

Segundo.

Crear la función donde llamarás a este objeto, debes valorar si el objeto existe y destruir el anterior, una vez hecho esto debes abrir el objeto con la llamada de información al server.

var X=null;
if(X && X.readyState!=0) { X.abort(); }//Aborta el objeto si es que ya esta inicializado
X=createXMLHTTP();
X.open("GET","db.aspx?Variable1=1",false);

Tercero.

Hay tres parámetros importantes en la funcion open().

Primero es GET solo para regresar información, en cambio si lo que se desea es actualizar, agregar o borrar información lo que debe usar es POST.

Segundo petición de la página y la consulta en si.

Tercero si es síncrono, false, de otra manera habrá una espera hasta recibir la respuesta, es decir podemos seguir trabajando en otra cosa en lo que llega la repuesta.

hay que validar el estado que guarda el objeto, para saber que hacer en cada caso y tomar la mejor decisión:

Los cuatro estados.

0 No inicializado, el objeto ha sido creado pero el método Open no ha sido llamado.
1 Cargando, El método Open ha sido llamado pero la respuesta no ha llagado aun.
2 Cargado, la respuesta ha sido enviada,
3 Interactivo, parte de la respuesta ha sido recibida, no termina el proceso.
4 Completado, todos los datos han sido enviados y la conexion ha sido cerrada.

Cuarto

Estos estados son importantes pues sabemos como esta la conexion y valorar si es pertinente llenar el tag o función con la información que ha llegado, el contenido lo podemos tomar de la propiedad ResponseText en forma de string.

X.onreadystatechange=function()
{ if(X.readyState==4&&X.responseText)
{ eval(d).innerHTML = X.responseText;}};

Quinto.

Sin embargo es posible que llegue un error del estado de la página consultada como el 404 , para lo cual debemos evaluar el estado de la página que nos regresa el resultado.

200 Ok, Sin error cualquier otro valor no traerá los resultados deseados.

if(X.status==200)


Sexto.

Para el último paso, llamas al método send(), este método acepta solo un argumento, el cual puede ser un string, no puedes omitir el argumento, debes pasarle un null como en los casos que utilices GET .

X.send(null);

Así termina la Teoría básica de como funciona el Ajax Engine para asp net ajax con net c#, para ver el ejemplo completo verifica el artículo anterior.



net 2.0 ajax

Despues de batallar con encontrar la teoria de como funciona asp net c# con ayax y como controlar las acciones en el server side que valioso es procurar encontrar un ejemplo útil que funcione correctamente, dandonos las indicaciones necesarias para ambientar y nos proporcionen el c# code completo, de ahi nace la necesidad de compartir mi experiencia y ahorrarte tiempo.

Dando por hecho las lecturas de que es Ajax y lo que implica esta nueva forma de emplear la comunicación de Cliente – Servidor, se planteará en este articulo solo la implementación que se puede llevar a cabo para quienes programen en Punto Net con Páginas Aspx en C# .

Solo explicaré los puntos principales que debes tomar en cuenta, necesitarás crear un website en visual studio y agregar los ejemplos que descargarás después, toma en cuenta las rutas de folders para que ambientes correctamente, asumo que esta parte ya la sabes, al menos hoy no explicaré esa parte.

Especificaremos los prerrequisitos :

Trabajar con el IIS version 5 o posterior.
Internet explorer 6.0 o posterior
Los ejercicios estan creados en Visual Studio 2005.


CREANDO TODO A MANO

Primero.
El primer ejercicio corresponderá a la creación de un objeto XMLHttpRequest del tipo javascript responsexml con el cual trabajaremos todo el tiempo, este objeto lo creamos en el cliente.

Segundo.
En la parte del servidor tenemos una página de consultas en asp net c# que regresará la información en un string segun sea el caso de la consulta .

La página puede aceptar parametros tradicionales por la URL consultas.aspx?variable1=valor1&variable2=valor2
Si ya lo notaron tendremos 2 páginas una con la información original y con segmentos que solo se recargaran mediante ayax con algun evento en el cliente, la otra página que puede ser un iframe no visible que nos arroja resultados de consulta según los parametros enviados.

Tercero.
En la parte del cliente haciendo uso del objeto creado en el paso 1 generaremos una función para trabajar con los resultados de la consulta hecha al server haciendo uso de una propiedad responseText del objeto. Se aclara que el resultado es un string, si fuera necesario darle formato de lado del server o bien recibirlo en el cliente y darle formato de presentacion aquí.

Primer Ejercicio



Primero: en el cliente puede ser una página InicioAjax.aspx o Com_Ajax.htm.
Creamos el objeto ajax (Xmlhttp)

function createXMLHTTP()
{
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i=0; i <>
{
try
{
var oRequest = new ActiveXObject(arrSignatures[i]);return oRequest;
} catch (oError) { }
}
throw new Error("MSXML No esta instalado en su sistema");
}

Segundo: En el el server en una pagina db.apsx en el cs.En el page load validar los parametros de entrada y asignar el metodo correspondiente, es decir el trabajo que se hara en el server side


protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Variable2"] != null && Request.QueryString["Variable2"] != null &&
Request.QueryString["Variable3"] != null && Request.QueryString["Variable4"] != null)
parametros();
else if (Request.QueryString["Variable1"] != null)
Response.Write(Tabla_1());
}

Tercero: Crear los métodos a emplear para regresar el resultado de la consulta.Creamos el formato de ser necesario.

Cuarto: En el cliente crear el método que hará uso de los resultados del server y adjuntar el método a algun evento del cliente.

He aquí un ejemplo, dado que puede enviar parámetros asignando la página que reciba la consulta

function FillParameters()
{
//Esta funcion solo regresa los valores de ciertas variables procesadas en el server
var X=null;
var Variable1="Esta es la variable1";
var Variable2="Esta es la variable2";
var Variable3="Esta es la variable3";
var Variable4="Esta es la variable4";
if(X && X.readyState!=0) { X.abort(); }//Aborta el objeto si es que ya esta inicializado
X=createXMLHTTP();
d = document.getElementById("disp");
eval(d).innerText = "Cargando datos....";
if(X!=null)
{
X.open("GET","db.aspx?Variable1="+Variable1+"&Variable2="+Variable2+"&Variable3="
+Variable3+"&Variable4="+Variable4,false);
X.onreadystatechange=function()
{ if(X.readyState==4&&X.responseText)
{ eval(d).innerHTML = X.responseText;}};
}
X.send(null);
}

En este metodo cargan variables y las envia como parámetros, es importante validar los estados de conexión del objeto para saber si la respuesta esta lista con el valor en 4 para ReadyState, por otra lado el metodo Get como primer parametro al abrir la conexión al server, el segundo parametro es la fuente de datos esta puede ser la consulta a un store o directamente un txt o xml publicado en el sitio o bien una página en el server, lo mismo aplica para los jps de java y los php. Y el último parámetro es la sincronización, asincrona= false.



Quinto: Donde emplearemos estas funciones del cliente.
Creamos los botones y asp net controls (grid view, etc..) que se emplearán en el ejercicio.


Sexto: Probar las diferentes formas de traer datos del servidor solo recargando la parte que nos interesa.

Descargar ejemplo completo

Ejemplo con un Framework en ajax . Proxima entrada....









ad

Consejos y ejemplos practicos como aplicar ajax

Mas info...

Ingresa tu correo:

Atraves de FeedBurner