Foros del Web » Programando para Internet » Javascript »

Opinion

Estas en el tema de Opinion en el foro de Javascript en Foros del Web. Estoy aprendiendo algo de AJAX, pero ando algo confundido, me colaboran por favor. Con esta funcion paso el resultado de una (1) consulta a un ...
  #1 (permalink)  
Antiguo 29/06/2012, 17:23
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Opinion

Estoy aprendiendo algo de AJAX, pero ando algo confundido, me colaboran por favor.

Con esta funcion paso el resultado de una (1) consulta a un div en una pagina

function MostrarConsulta(datos){
divResultado1 = document.getElementById('resultado1');
ajax=objetoAjax();
ajax.open("GET", datos);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado1.innerHTML = ajax.responseText
}
}
ajax.send(null)
}

<div id="resultado1"></div>


Para pasar el resultado de dos consultas a dos div diferentes en una pagina con una sola funcion es correcto hacer esto

function MostrarConsulta(datos){
divResultado1 = document.getElementById('resultado1');
divResultado2 = document.getElementById('resultado2');
ajax=objetoAjax();
ajax.open("GET", datos);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado1.innerHTML = ajax.responseText
divResultado2.innerHTML = ajax.responseText
}
}
ajax.send(null)
}

<div id="resultado1"></div>
<br>
<div id="resultado2"></div>

Gracias por su tiempo

Isabel
  #2 (permalink)  
Antiguo 29/06/2012, 17:48
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 1 mes
Puntos: 35
Respuesta: Opinion

Si y no .... puede que te funcione (en este momento te va devolver error) pero a mi parecer el uso de Ajax debe parametrizarse pero no personalizarce.

me explico, el "mostrarconsulta()" debe responder a un tag a la vez y no lo debes llamar directamente si no pasar informacion por momentos atravez de JS puro.

O por lo menos a si lo uso yo.
  #3 (permalink)  
Antiguo 29/06/2012, 18:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Opinion

Hola:

Los objetos Ajax pueden devolver texto plano (text/plain -> responseText), o código xml (responseXML)... si no entregas texto estructurado xml (yo lo prefiero, pero noto que no es muy habitual), solo obtendrás un texto (uno solo), y si quieres que sea más de uno, tendrías que encadenarlos, por ejemplo con el típico separador ","... u otro.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 29/06/2012, 19:53
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Opinion

Lo que planteás es muy ambiguo, hay varias posibilidades, y deberás usar la que más se ajuste a tu aplicación.
De tu ejemplo en particular vas a obtener que tus dos divs se llenen con los mismos datos, es eso lo que querés?
Podrías por ejemplo, hacer que los id de los div de destino sean pasados como variables a la función, con lo que le darías a la misma más flexibilidad.
Podrías manipular tu ajax.responseText en la función y ubicar diferentes datos en diferentes divs(algo así ya te comentó @caricatos), por ejemplo si recibis de tu php
"nombre apellido", hacer un split() y poner el nombre en un div y el apellido en otro.
Podés hacer también que determinadas condiciones se generen según las variables pasadas en el ajax.open("GET", datos); , a un php y así unas cuantas combinaciones más.
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 29/06/2012, 21:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Opinion

Chicos gracias por su tiempo

emprear, lo que tu dices es verdad la informacion se me repite en los dos div, lo de hacer un split() por lo poco que entiendo seria lo mas practico.

El ejemplo que coloque es por que estoy tratando de entender como funciona el AJAX, la verdad es muy complicado.

Tu en dias anteriores me colaboraste pero la verdad me perdi en la solucion.

Los manuales y ejemplos que e consultado son tan variados que me pierdo. Sin embargo sigo intentando.

En este ejemplo lo que busco es sacar de la consulta de la base de datos (divResultado1), el numero de registros (divResultado3) y colocar en un div los registros encontrados y en otro div el numero de registros de esa consulta.

function MostrarConsulta(datos){
var divResultado1 = document.getElementById('resultado1');
var divResultado2 = divResultado1.getElementsByTagName('box1');

var divResultado3 = divResultado2.length;

ajax=objetoAjax();
ajax.open("GET", datos);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado1.innerHTML = ajax.responseText
divResultado3.innerHTML = ajax.responseText
}
}
ajax.send(null)
}

<div id="resultado1"></div>
<br>
<div id="resultado2"></div>

Hasta ahora no lo he logrado.

Isabel
  #6 (permalink)  
Antiguo 29/06/2012, 21:53
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Opinion

voy a tratar de hacer una explicación sencilla (que apunta más a lo práctico que a lo terorico)

hasta ahora vos sabés que mediante Ajax podés hacer una petición a un php. eso va a generar una respuesta, la que conocés como ajax.responseText, pero que es eso en definitiva? ni más ni menos que lo que ese php hubiese mostrado en el navegador si lo hubieses ejecutado directamente,
si tu archivo php contiene
<?php
echo "hola";
?>

tu ajax va a recibir hola como respuesta, medio tonto como ejemplo, pero, sin embargo a partir de ahi podés hacer una lógica más elaborada

supongamos que tu llamada desde al ajax fuese por get

x.php?var=1
y tu php
<?php
if($_GET['var'] == 1){
echo "Ok";
}else{
echo "Mal";
}
?>

entonces la respuesta será Ok. pero si tu php tiene

<?php
if($_GET['var'] == 1){
echo "Ok";
}else{
echo "Mal";
}

echo "No se";
?>
tu respuesta será lo que se imprima, es decir
OkNo se
Se entiende?

Vallamos con una base de datos

$resultado = mysql_query("SELECT * FROM tabla1", $enlace);
$total_filas = mysql_num_rows($resultado);
echo $total_filas;

en ese caso el ajax.resposeText será el numero de registros de la consulta (en este caso el total de registros de la tabla ya que no hay condiciones en la consulta, imaginemos para el ejemplo que fueron 10.
Ahora agreguemos una condicón a la consulta

$resultado = mysql_query("SELECT * FROM tabla1", $enlace);
$total_filas = mysql_num_rows($resultado);
echo $total_filas;

$resultado = mysql_query("SELECT * FROM tabla1 WHERE nombre='juan'", $enlace);
$total_filas = mysql_num_rows($resultado);
echo $total_filas;
// suponemos que hay tres juan

la respuesta va a ser 103, entonces eso no te sirve, vos querés los valores por separado, que tal si hacemos esto

$resultado = mysql_query("SELECT * FROM tabla1", $enlace);
$total_filas = mysql_num_rows($resultado);
echo $total_filas "|";

$resultado = mysql_query("SELECT * FROM tabla1 WHERE nombre='juan'", $enlace);
$total_filas = mysql_num_rows($resultado);
echo $total_filas;

la respuesta será
10|3

ahi ya tenés para hacerle un split a la respuesta y hacerle innerHTML con el indice 0 a un div y otro a un segundo div con el indice 1

Como te darás cuenta las combinaciones posibles de lo que podés conseguir son muy amplias
Espero que te haya servido de algo.
como recomendación final, te sugiero que leas más, practiques con otros ejemplos y crees los tuyos propios, aunque sean muy simples.
SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 30/06/2012, 02:11
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Opinion

Hola:

... y para datos estructurados, voy a insistir en el formato xml, que aún siendo más estricto, creo que tiene más futuro que otras fórmulas, como las estructuras json.

Un ejemplo que tengo implementado en una de mis páginas es el típico top-10 paginado, donde recibo la url de la página junto a su título y una descripción en listados de a 10. y los genero en un fichero con estructura rss... supongo que estoy comentando cosas algo complejas, pero esa cosas, tarde o temprano se suelen tratar.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 05/07/2012, 18:44
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Opinion

Chicos gracias por su tiempo

emprear, MIL GRACIAS POR TU TIEMPO Y COLABORACION.

Despues de revisar el ejemplo y la explicacion que me sugeriste, hice cambios, pruebas,pruebas,pruebas y logre que me funcionara. Ya entiendo un poco mas el proposito y funcionamiento de la linea ajax.responseText y .innerHTML

Cuando oprimo un boton en la pagina principal me ejecuta esta funcion y me actualiza los dos div que necesitaba, me funciona perfecto.

La funcion la modifique y me quedo de la siguiente forma, no se si es lo mas estetico, pero me funciona muy bien:

function MostrarConsulta(datos){
var divResultado1 = document.getElementById('resultado1');
var divResultado2 = document.getElementById('resultado2');

ajax=objetoAjax();
ajax.open("GET", datos);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
var abc = ajax.responseText;
var ccc = abc.split("///");
divResultado1.innerHTML = ccc[0];
divResultado2.innerHTML = ccc[1];;
}
}
ajax.send(null)
}

Sigo estudiando, revisando ejemplos y prueba-error.....

Mil gracias

Isabel
  #9 (permalink)  
Antiguo 05/07/2012, 18:54
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Opinion

@isabelramirezmontoya
Para redondear, quiero aclararte una cosa. el ejemplo que te dejé, es un poco tirado de los pelos, pero estaba destinado concretamente a eso, que entiendas un poco más el tema de la resuesta Ajax y como volcar dichos datos en la página.
Hay técnicas más específicas como veo que han mencionado, xml, json,jsonp.
Pero bueno, eso ya es cuestión de que profundices tus conocimientos a través del estudio

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: ajax, funcion, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:42.