Foros del Web » Programando para Internet » Jquery »

problema enviando datos con $.post jquery

Estas en el tema de problema enviando datos con $.post jquery en el foro de Jquery en Foros del Web. Hola a todos!! Tengo una duda que me está volviendo loco.... y es que tengo que enviar un conjunto de datos por post con jquery ...
  #1 (permalink)  
Antiguo 02/11/2009, 18:23
 
Fecha de Ingreso: octubre-2009
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
problema enviando datos con $.post jquery

Hola a todos!!

Tengo una duda que me está volviendo loco.... y es que tengo que enviar un conjunto de datos por post con jquery y no me acaba de funcionar como es debido. Llevo una semana con esto y oye que no sale!!

Me explico:

Dentro de un formulario que sirve para añadir canciones de diferentes discos mediante drag&drop de una columna a un recopilatorio representado en otra columna, tengo el siguiente código que envía mediante post a la BB.DD dichas canciones en el momento que las suelto dentro de la columna de recopilatorios.

El código del formulario donde aparecen las canciones en la columna izq listas para arrastrar:
Código PHP:
<div id="contentLeft">
        <ul id="sortable1" class="connectedSortable">
                        
            <?php        
            
if(isset($_POST['disc']) && $_POST['disc'] != '')
            {
    
                
$query3 mysql_query("SELECT nombreCancion, idCancion FROM `" DBPREFIX "canciones` WHERE idDisco = "$_POST['disc']);    // consulta a la bbdd
                
if(mysql_num_rows($query3)!=0)
                {
                    while(
$fila_cancion mysql_fetch_assoc($query3))
                    {
                    
                    echo 
"<li id='recordsArray_".$fila_cancion['idCancion']."' class='list'>".$fila_cancion['nombreCancion']."<img id='eliminar' src='images/backgrounds/eliminar.png' alt='Borrar' class='eliminar' /></li>";                
                    
                    }
                    
                }     
                
                else
                {
                
$msg 'Actualmente no existen registros de canciones de este disco.';
                }
                
            
            
?>
            
            </ul>
            
        </div>

El código que procesa la columna derecha correspondiente al recopilatorio cada vez que se deposita un canción:
Código:
$(document).ready(function(){ 
						   
	//$(function() {
		$("#contentRight ul").sortable({ opacity: 0.6, cursor: 'move', update: function() {
			var order = $(this).sortable("serialize") + '&action=updateRecordsListings'; 
			$.post("scripts/update_order_recopilatorio.php", order, function(theResponse){
				$("#contentMiddle").html(theResponse);
			}); 															 
		}								  
		});
	//});

});	

$(function() {
		$("#sortable1, #sortable3").sortable({
			opacity: 0.6, cursor: 'move', connectWith: '.connectedSortable'
		}).disableSelection();
	});
Hasta aquí perfecto! Funciona todo, arrastro la canción a la columna del recopilatorio y se envían los datos por post recogiéndolos la BB.DD de forma correcta. Al tener que enviar un número indeterminado de registros en este caso canciones, los datos se tratan como un array por eso se almacena lo recogido en una variable y es la que enviamos por post, como he dicho ningún problema. Nota importante es que también sirve para ordenar las canciones entre ellas cuando hacemos drag&drop intercambiando las posiciones en la misma columna del recopilatorio, por lo tanto a cada cambio se vuelve a enviar un post con la info y la nueva posición de las canciones, esto, también funciona perfectamente!!

La cuestión viene en el momento en que se quiere eliminar de la columna de recopilatorios algunas de las canciones que hemos añadido. Aquí el código que lo hace:
Código:
$(document).ready(function(){

	$(".list .eliminar").click(function(){
	
		$(this).parents(".list").animate({ opacity: 'hide' }, 1000, "linear", function(){
			var del = 'deleteRecordsListings';
			var deldisco = $(".vardisco").attr("value");
			var delid = $(this).attr("id");
			
			$(this).remove();
			
			if ( delid != "")
			{
			
			var env = $("#contentRight ul").sortable("serialize") + '&action=updateRecordsListings'; 
			$.post("scripts/update_order_recopilatorio.php", {env, del:del, deldisco:deldisco, delid:delid}, function(theResponse){ $("#contentMiddle").html(theResponse); }); 
					
      		        }
		
		
		});
	});
	
	
});
Bueno, esto lo que hace es: cada canción tiene una imagen añadida que es la asociada al evento click mediante la clase .eliminar. Cuando hacemos click la canción desparece de la lista lentamente y recogemos los datos que identificarán al registro eliminado para finalmente destruir del DOM dicho elemento. Hasta aquí perfecto!! El problema viene cuando al siguiente paso en el código quiero enviar los datos del elemento eliminado (id y mas cosas..) y los datos de los registros que quedan en la columna para actualizar en la BB.DD el orden de las canciones.

Por lo visto, la estructura para enviar por post es esta "$.post( url, [data], [callback], [type] ) " y en el código anterior así está hecho y funciona. Sin embargo en este último caso pues.... "medio-funciona". Tal y como yo he puesto el código está mal, lo se, pero he probado de todo y el problema está en esta línea:

Código:
$.post("scripts/update_order_recopilatorio.php", {env, del:del, deldisco:deldisco, delid:delid},....
Si lo pongo así envía los datos del registro eliminado:
Código:
$.post("scripts/update_order_recopilatorio.php", {del:del, deldisco:deldisco, delid:delid},.....
Si lo pongo así envía los datos de los registros que quedan en la columna excepto el eliminado claro:
Código:
$.post("scripts/update_order_recopilatorio.php", env,.....
En el momento que quiero enviar juntos todos estos datos, me da error en todos los casos siguientes o simplemente omite una información y envía la otra:
Código:
1--- $.post("scripts/update_order_recopilatorio.php", {env, del:del, deldisco:deldisco, delid:delid},.....

2--- $.post("scripts/update_order_recopilatorio.php", env, {del:del, deldisco:deldisco, delid:delid},.....

3--- $.post("scripts/update_order_recopilatorio.php", {del:del, deldisco:deldisco, delid:delid},env,.....

4--- $.post("scripts/update_order_recopilatorio.php", {env, del:del, deldisco:deldisco, delid:delid, env},.....

5--- $.post("scripts/update_order_recopilatorio.php", (env ,{del:del, deldisco:deldisco, delid:delid}),.....

6--- $.post("scripts/update_order_recopilatorio.php", {env + del:del, deldisco:deldisco, delid:delid},.....

7--- $.post("scripts/update_order_recopilatorio.php", env + {del:del, deldisco:deldisco, delid:delid},.....
Y un sinfín mas de pruebas que creo mejor no postear ahora, bastante larga es ya mi petición de ayuda ya... sorry!!

Se que no se pueden enviar varios post en un mismo evento ( tipo $.post()... $.post()... $.post()...), pero sé que esto que os comento sí que se puede hacer de alguna forma.... si alguién sabe qué puede estar pasando, desde ya MIL GRACIAS!!!

Sorry por el rollo y espero haberme explicado bien... un saludo!!!
  #2 (permalink)  
Antiguo 03/11/2009, 08:05
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: problema enviando datos con $.post jquery

Viendolo a sobrevuelo, noto que no estas declarando el tipo de datos que envias:

Si te fijas en la documentacion, hay un cuarto paramentro que tiene que decir, por ejemplo, JSon:

http://docs.jquery.com/Ajax/jQuery.post

Podes enviar todas las peticiones $.POST que quieras, que no es sino hacer muchas transacciones Ajax, pero resumidas en un solo renglon.


Respecto a esto:
Cita:
var env = $("#contentRight ul").sortable("serialize") + '&action=updateRecordsListings';
Me gustaria que imprimas en pantalla el resultado. Eso que utiliza & e = tiene que ver con GET y no con POST, y no lo estas tratando de ninguna manera (serializando o lo que fuere).
  #3 (permalink)  
Antiguo 03/11/2009, 17:48
 
Fecha de Ingreso: octubre-2009
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: problema enviando datos con $.post jquery

Hola Mayid! Gracias por responder y sobretodo tener la paciencia de leer el tostón que he posteado....

En cuanto a lo que me comentas, tienes razón, el último parámetro a añadir es el "type" que sirve para declarar el tipo de datos como muy bien dices, sin embargo es un argumento opcional, no lo dije antes (sorry) pero es algo que ya he probado sin ningún cambio al respecto.

Respecto a lo otro según esta línea:

Cita:
var env = $("#contentRight ul").sortable("serialize") + '&action=updateRecordsListings';

Si por ejemplo pongo tres canciones en la columna de recopilatorios, se efectúa el post con los siguientes datos:

action updateRecordsListings //---> Esto corresponde a esta parte del código ('&action=updateRecordsListings') y se recoge en otro php como $_POST['action'] y funciona perfectamente.

discorec[] 19 //----> Esto corresponde a un dato que no viene al caso pero se recoge como $_POST['discorec']

recordsArray[] 14 //---> Esto corresponde a una de las tres canciones, esta parte del código ($("#contentRight ul").sortable("serialize") ) y se recoge como $_POST['recordsArray'] y funciona perfectamente.

recordsArray[] 17 //---> idem
recordsArray[] 18 //---> idem


Por lo tanto como ves, en este aspecto no hay ningún problema además de que se serializa perfectamente. La cuestión es que quiero enviar estos datos mas los anteriores citados en el otro post, o sea estos {del:del, deldisco:deldisco, delid:delid} además de la variable env. Es decir esto:

$.post("scripts/update_order_recopilatorio.php", {env, del:del, deldisco:deldisco, delid:delid},....bla bla...

Pero al final tengo que elegir o así para que funcione:
$.post("scripts/update_order_recopilatorio.php", env,....bla bla...

O así:
$.post("scripts/update_order_recopilatorio.php", {del:del, deldisco:deldisco, delid:delid},....bla bla...

Con la consecuencia de que al final tengo que elegir que datos enviar y esto no me sirve para mi propósito.En fin.... no se, seguiremos buscando a ver. ¡¡¡Gracias por tu interés!!!
  #4 (permalink)  
Antiguo 03/11/2009, 20:02
 
Fecha de Ingreso: octubre-2009
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: problema enviando datos con $.post jquery

Bueno.... lo solucioné!! Y no se si alegrarme o ponerme a llorar de verdad.... ahora todo funciona a la perfección y gracias a Mayid, de verdad que te estoy muy agradecido bro!!

Digo lo de ponerme a llorar mas que nada porque la solución era tan sencilla como poner DOS sentencias $.post!!! Vamos esto:

Cita:
$.post("scripts/update_order_recopilatorio.php", {del:del, deldisco:deldisco, delid:delid}, function(theResponse){ $("#contentMiddle").html(theResponse); });

$.post("scripts/update_order_recopilatorio.php", env, function(theResponse){ $("#contentMiddle").html(theResponse); });
Y digo gracias Mayid por esto:

Cita:
"Podes enviar todas las peticiones $.POST que quieras, que no es sino hacer muchas transacciones Ajax, pero resumidas en un solo renglon."
No se en que estaría pensando yo que tenía grabado a fuego el (falso) concepto de que en un mismo evento no se podían enviar mas de un post!! De ahí mi cabezonería en tener que enviar todo en la misma sentencia, que error mas estúpido OMG!!

GRACIASSSS!!!!
  #5 (permalink)  
Antiguo 04/12/2009, 10:17
 
Fecha de Ingreso: octubre-2009
Mensajes: 32
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: problema enviando datos con $.post jquery

Hola a todos

llegué acá gogleando porque tenía un problema "parecido", y quiero comentar algo que si bien solucioné lo solucioné distínto y está bueno que quede en algún lado. Comento cual era mi problema:

Justamente mi problema era que quería enviar dos variables con jquery y no pude con el método que en principio aquí se señala como solución, que curiosamente fué mi intento inicial. Mi intento inicial fue hacer dos $.post

Las variables están en un FORM html que a su vez vienen de una consulta mysql. En resumen tengo dos variables en la pagina1.php que quiero enviar a pagina2.php y que vuelva y se actualice pagina1.php

Con jquery capturo el evento click de un botón de pagina1.php para que dispare la función que envía las dos variables. Hasta acá todo bien. Ahora, mi primer intento de enviar las dos variables fue hacer dos $.post: (Las variables son "aeliminar" y "base")

$.post("pagina2.php",{aeliminar:v});

$.post("pagina2.php",{base:x},llegadaDatos);

En la función llegadaDatos() está lo demás, que no hay problema, actualiza... todo.

No entiendo porque no funciona esto. En la página2.php recogía los datos con $_REQUEST $_POST $_GET lo que sea y recogía una sola variable, las dos nunca.

Curiosamente, la solución para mí fue mandar las dos juntas de esta manera

$.post("pagina2.php",{aeliminar:v, ba:x},llegadaDatos);

Evidentemente hay algo conceptual básico en lo que estoy equivocado. si alguien pude responder estaría bueno. No entiendo porque a Bias le funcionan los dos $.post

Aclaración: Mi problema estaba en el envío a pagina2.php, no en la recepción de los datos de pagina2.php, que sería en tercer parámetro de $.post (llegadaDatos), quizá esa sea la diferencia.

Por lo demás, que quede esto para el que se está rompiendo el marote. Espero que sirva.

Saludos a todos
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 16:40.