Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Multiples llamadas ajax solo procesa ultima?

Estas en el tema de Multiples llamadas ajax solo procesa ultima? en el foro de Frameworks JS en Foros del Web. Buenas a todos, estoy empezando a internarme en el mundo ajax y aunque creia haber comprendido el funcionamiento basico hay algo que no logro hacer, ...
  #1 (permalink)  
Antiguo 27/03/2010, 10:55
Avatar de chains000  
Fecha de Ingreso: marzo-2010
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Multiples llamadas ajax solo procesa ultima?

Buenas a todos, estoy empezando a internarme en el mundo ajax y aunque creia haber comprendido el funcionamiento basico hay algo que no logro hacer, a ver si consigo explicarme.

Tengo un HTML con una tabla que simula un calendario anual, en las filas los meses y en las columnas los dias.

Lo que estoy intentando es que al clickar en una celda se haga una peticion AJAX al servidor en la cual almacenaré en una base de datos las fechas clickadas. Hasta aqui no hay problema.

Para añadir efecto visual, pretendo que al hacer click en la celda de la tabla, dicha celda se me ponga con el fondo amarillo y al recibir la respuesta de que todo ha ido bien pase el fondo de la celda a color rojo (una forma de decir que amarillo=se esta procesando la peticion, rojo=la peticion ha sido procesada correctamente).

El caso es que parecia que funcionaba, pero cuando he puesto un retardo en el proceso que se ejecuta contra bases de datos para que me diera tiempo en la pagina original a clickar varias celdas a la vez y ver si las procesaba, solo me cambia de color a rojo la ultima celda clickada, quedandose en amarillo las demas.




He puesto un id a cada <td> con la fecha a la que corresponde. En primer caso lo habia hecho con el evento onClick del <td> y con una funcion:
Código:
function clickCierres(element,xurl){
	element.className='cerrando';
	request=getAjaxRequest();
	request.onreadystatechange=function(){
		   if (request.readyState==4){
			   if (request.status==200 || window.location.href.indexOf("http")==-1){
				   var ele=document.getElementById(request.responseText);
				   ele.className='';
				   ele.style.backgroundColor='red';
				 //  alert(request.responseText);
			   }
			   else{
			    //alert("ERROR " + request.responseText)
			   }
			  }
	   }
	var datos="xdate="+escape(element.id);
	
	request.open("POST", xurl, true);
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.send(datos);
	//alert(element.id);
}
Quedando los <td> de la tabla de la siguiente forma:
Código:
<table id="large"> 
  <thead> 
         <th>Mes</th> 
	<th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th><th>13</th><th>14</th><th>15</th><th>16</th><th>17</th><th>18</th><th>19</th><th>20</th><th>21</th><th>22</th><th>23</th><th>24</th><th>25</th><th>26</th><th>27</th><th>28</th><th>29</th><th>30</th><th>31</th>
</thead> 
  <tr> 
    <th id="xnone">Enero</th> 
    <td id="2010-01-01" onClick="clickCierres(this,'http://www.miservidor/proceso.php');">x</td>
    <td id="2010-01-02" onClick="clickCierres(this,'http://www.miservidor/proceso.php');">x</td>
    <td id="2010-01-03" onClick="clickCierres(this,'http://www.miservidor/proceso.php');">x</td>
    <td id="2010-01-04" onClick="clickCierres(this,'http://www.miservidor/proceso.php');">x</td>

// etc....
Pero no funcionaba asi que hice un cambio, pensando que igual era un problema por usar en todos la misma funcion asi que cambie la asignacion del onclick a una asignacion dinamica con esta funcion....

Código:
	<script type="text/javascript">
		$(document).ready(function(){
			var tabla=document.getElementById("large");
			var filas = tabla.rows;
			for(var i=0; i<filas.length; i++) {
			  var fila = filas[i];
			  var columnas = fila.cells;
			  for(var j=0; j<columnas.length; j++) {
			    var columna = columnas[j];
				if((columna.id!="xnone")&&(columna.id!="")) 
					columna.onclick=function(){
						var xurl='http://www.miservidor/proceso.php';
						//alert(xurl+"---->"+this.id);
						this.className='cerrando';
						request=getAjaxRequest();
						request.onreadystatechange=function(){
							   if (request.readyState==4){
								   if (request.status==200 || window.location.href.indexOf("http")==-1){
									   var ele=document.getElementById(request.responseText);
									   ele.className='';
									   ele.style.backgroundColor='red';
									 //  alert(request.responseText);
								   }
								   else{
								    //alert("ERROR " + request.responseText)
								   }
								  }
						   }
						var datos="xdate="+escape(this.id);
						
						request.open("POST", xurl, true);
						request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
						request.send(datos);
											
					}
				}
			}			
			
		  });
	</script>

Peor tampoco funciona.

No se si me he explicado bien, si me he explicado bien, alguien sabe que pasa??

Saludos.
  #2 (permalink)  
Antiguo 29/03/2010, 01:45
Avatar de chains000  
Fecha de Ingreso: marzo-2010
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Multiples llamadas ajax solo procesa ultima?

alguien? nadie? :)
  #3 (permalink)  
Antiguo 29/03/2010, 02:12
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Multiples llamadas ajax solo procesa ultima?

Hola:

No se ve como creas el objeto Ajax, pero si no vas creando nuevos objetos (new), entonces puede que solo redefinas el manejador evento readyStateChange...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 29/03/2010, 02:52
Avatar de chains000  
Fecha de Ingreso: marzo-2010
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Multiples llamadas ajax solo procesa ultima?

Hola.

te pongo el codigo de creacion del objeto

Código:
function getAjaxRequest(){
	  var request = false;
	   try {
	     request = new XMLHttpRequest();
	   } catch (trymicrosoft) {
	     try {
	       request = new ActiveXObject("Msxml2.XMLHTTP");
	     } catch (othermicrosoft) {
	       try {
	         request = new ActiveXObject("Microsoft.XMLHTTP");
	       } catch (failed) {
	         request = false;
	       }  
	     }
	   }
	   return request;
}
  #5 (permalink)  
Antiguo 30/03/2010, 16:40
Avatar de chains000  
Fecha de Ingreso: marzo-2010
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Multiples llamadas ajax solo procesa ultima?

Nadie puede darme alguna pista y/o directriz?
  #6 (permalink)  
Antiguo 30/03/2010, 17:55
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Respuesta: Multiples llamadas ajax solo procesa ultima?

te doy un consejo? usa Prototype y dejaras de sufrir
http://www.prototypejs.org/

Código PHP:
new Ajax.Request('/some_url', {
  
method'get',
  
parameters: {company'example'limit12}
  }); 
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #7 (permalink)  
Antiguo 15/04/2010, 03:46
Avatar de chains000  
Fecha de Ingreso: marzo-2010
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Multiples llamadas ajax solo procesa ultima?

Cita:
Iniciado por eddwinpaz Ver Mensaje
te doy un consejo? usa Prototype y dejaras de sufrir
[url]http://www.prototypejs.org/[/url]

Código PHP:
new Ajax.Request('/some_url', {
  
method'get',
  
parameters: {company'example'limit12}
  }); 
Lo tendre en cuenta para la proxima pero ahora mismo no puedo cambiar todo lo que tengo.

Nadie puede aportarme algo?

Etiquetas: ajax, javascript
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:52.