Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] explicar mas o menos como trabajar con ajax

Estas en el tema de explicar mas o menos como trabajar con ajax en el foro de Jquery en Foros del Web. Hola a todos, alguien podría explicarme como trabajar con ajax para enviar y recibir funciones a PHP, se que este es el formato del código ...
  #1 (permalink)  
Antiguo 13/02/2014, 17:56
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
explicar mas o menos como trabajar con ajax

Hola a todos, alguien podría explicarme como trabajar con ajax para enviar y recibir funciones a PHP, se que este es el formato del código pero no entiendo como se pasan las variables y como codificar el succes y error, para que vaya por ejemplo a otra pagina.

Código HTML:
 $.ajax({
        url:'guardarAlumno.php', //URL del archivo php que procesa la petición. Se explica mas adelante
        type:'post', // Los datos se envían mediante el método POST
        dataType:'json', // La respuesta se obtiene como JSON
        data:datos // Los datos del formulario
    }).done(function(respuesta){
        //Condición para verificar si se guardaron o no los datos
        if( respuesta.estado == true )
            alert("La información se guardó correctamente");
        else
            alert("Ocurrió un error al guardar la información, por favor vuelve a intentarlo");
    });
    return false; // Se regresa false para el que submit no se ejecute.
O porque en este caso usan .done(el nombre de una funcion).

Espero que alguien pueda ayudarme o guiarme para entender como manejar este tema.

Saludos....
  #2 (permalink)  
Antiguo 14/02/2014, 00:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: explicar mas o menos como trabajar con ajax

Con el método Ajax de jQuery, puedes realizar peticiones asíncronas al servidor de la misma forma en la que lo harías implementando una función XHR con JS nativo. Aunque el método tiene varios atributos, basta con que utilices algunos para realizar un envío de datos a un archivo determinado y realizar algo con la respuesta obtenida de éste.

Con un pequeño ejemplo se puede entender mejor:

Archivo inicial
Código HTML:
Ver original
  1. Ingrese su nombre: <input type = "text" id = "nombre" />
  2. <button id = "buscar">Buscar</button>
  3.  
  4. <section id = "resultados"></section>

Archivo JavaScript
Código Javascript:
Ver original
  1. $("#buscar").click(function(){
  2.     $.ajax({
  3.         url: "buscar.php",
  4.         type: "GET",
  5.         dato: {nombre: $("#nombre").val()},
  6.     }).done(function(response){
  7.         $("#resultados").html(response);
  8.     }).fail(function(jqXHR, textStatus){
  9.         alert("Se ha producido un fallo: " + textStatus);
  10.     });
  11. });

Archivo buscar.php
Código PHP:
Ver original
  1. $nombre = $_GET["nombre"];
  2. $query = mysql_query("SELECT * FROM usuarios WHERE nombre LIKE '%$nombre%'");
  3. if (mysql_num_rows($query)){
  4.     echo "Nombres encontrados: <br />";
  5.     while ($row = mysql_fetch_array($query)){
  6.         echo $row["nombre"] . "<br />";
  7.     }
  8.     mysql_free_result($query);
  9. }
  10. else{
  11.     echo "No se encontraron coincidencias";
  12. }

En el archivo inicial, tengo una caja de texto de Id "nombre", un botón de Id "buscar" y una sección de Id "resultados", lo que hago en el archivo JavaScript es básicamente lo siguiente; cuando el usuario de un clic en el botón, se ejecuta el método Ajax, en el cual envío el valor contenido en la caja "nombre" hacia el archivo "buscar.php", eligiendo el método GET para el envío del dato (pude haber elegido POST). Cuando el envío y recepción de datos se haya completado y se haya recibido una respuesta del servidor (done), asignamos dicha respuesta como contenido de la sección "resultados", pero si se produce un fallo (fail), muestro un mensaje de alerta notificando al usuario del fallo sucedido.

Otra forma de realizar algo cuando ya se tiene una respuesta es a través del método success:

Código Javascript:
Ver original
  1. $("#buscar").click(function(){
  2.     $.ajax({
  3.         url: "buscar.php",
  4.         type: "GET",
  5.         dato: {nombre: $("#nombre").val()},
  6.         success: function(response){
  7.             $("#resultados").html(response);
  8.         },
  9.         error: function(jqXHR, textStatus){
  10.             alert("Se ha producido un fallo: " + textStatus);            
  11.         }
  12.     });
  13. });

Finalmente, en el archivo "buscar.php", recibimos el valor mediante el método GET que es el que señalamos en el atributo "type" del método Ajax y que es el método por defecto, realizamos una búsqueda en la BD con dicho dato, si encontramos coincidencias, las mostramos en una lista, caso contrario, se muestra un mensaje en el que se le indica al usuario que no se encontraron datos con el dato ingresado. Dicho resultado (la lista de datos o el mensaje de error), es la respuesta del servidor que mostraremos dentro de la sección "resultados" en el primer archivo.

Dale una leída al manual oficial para que aprendas más al respecto: http://api.jquery.com/jQuery.ajax/

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 26/02/2014, 08:32
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: explicar mas o menos como trabajar con ajax

Muchas gracias por tu respuesta Alexis88, me ayudo mucho lo que me dijiste, ahora una consulta, estoy tratando de usar las funciones dragg y drop de jquery, lo que intento hacer es, tengo una lista con unos nombres y otra con un menú, la lista de nombres tiene la función dragg y el menú la de dro. Mi idea es que al arrastrar y soltar cualquier nombre en cualquier fila del menú, en la base de datos se me cambie un numero de id, lo que tengo hasta ahora es:

javascript:

Código HTML:
       	$(document).ready(function(){ 	
			var $tabla = $('.tarea'), $lista = $('.lista');
			$('li', $tabla).draggable({
				//helper: 'clone',
				cursor: 'move',
				connectWith: '.lista li',
				//revert: true
			});
			$('li', $lista).droppable({
				accept: '.tarea li',
				hover: '',
				drop: function(ev, ui) {
					// esta funcion se activa al soltar el elemento en el area
					// recuperamos el id del elemento que estamos agarrando
					var id 	= ($(ui.draggable).attr("id"));		
					var idmenu = ($(ui.droppable).attr("idmenu"));	
							$.ajax({
									url: "editartarea.php",
									type: "GET",
									dato: {id: $("id").val(), idmenu: $("idmenu").val()},
								}).done(function(response){
							$("#resultados").html(response);
							}).fail(function(jqXHR, textStatus){
							alert("Se ha producido un fallo: " + textStatus);
							});
					}
			});

			
			});
uno de los elementos del menú:

Código HTML:
<ul class="lista aqui nav nav-sidebar">
						<li>Acciones</li>
						<li id="<?php $idmenu=2; ?>"><a href="inbox.php?pagina=archivar">Archivar <span class="badge"><?php $idmenu=2; $cant = contar(2); if($cant != "0")echo $cant; else echo""; ?></span></a></li>
						<li><a href="inbox.php?pagina=resolver">Resueltas <span class="badge"><?php $idmenu=3; $cant = contar(3); if($cant != "0")echo $cant; else echo""; ?></span></a></li>
					</ul> 
La parte que carga los nombres:

Código HTML:
										$login_nick = $_SESSION["nick"];
										$estadoTarea = 1;
										$estadoAI = 1;
										$resultado = consultar("SELECT * FROM tareas WHERE estadoActivoInactivo='$estadoAI' AND estadoTarea_estadoTarea='$estadoTarea' AND login_nick='$login_nick'");
										
										
										while($row = mysql_fetch_array($resultado)){
											
											echo "<ul class='tarea'> ";
											echo "<li>".$row["nombreTarea"]."</li>";
											echo "<input type='hidden' id='".$id=$row["idTarea"]."' name='idtarea'/>";
											echo "</ul>";
										}
Hasta ahora puedo arrastrar y soltar pero al soltar me dice que undefined index tanto del id como del idmenu, la verdad no se donde estoy haciendo mal las cosas.

Otro tema es que también estoy usando el framework de bootstrap para modelar la pagina puede ser problema con eso?

Desde ya muchas gracias nuevamente.

Saludos.
  #4 (permalink)  
Antiguo 26/02/2014, 09:27
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: explicar mas o menos como trabajar con ajax

Bien me respondo solo, ya logre obtener el elemento de la lista de nombres con ui.draggable y usando
Código HTML:
"editartarea.php?id="+ $id +"&idmenu=" + $idmenu,
para la consulta ajax.

Ahora la que no puedo obtner es el id de la lista de menú, en el li del menu estoy definiendo una variable asi:
Código HTML:
<li id="<?php $idmenu="2"; ?>"> 
dentro del evento drop de jquery la trato de obtener asi:

Código HTML:
var $idmenu = ($(this).attr("idmenu"));
Al usar firebug me dice esto:

Código:
GET http://localhost/final/include/editartarea.php?id=3&idmenu=undefined
Es decir que no me esta tomando el valor de la variable idmenu.

Entonces mi problema esta en que no se como puedo diferenciar los distintos li que pertenecen al menú, es correcto hacer con
Código HTML:
<li id="<?php $idmenu="2"; ?>"> 
?? o hay alguna otra forma de hacerlo??

Alguna idea donde puede estar el error?

Saludos.

Última edición por dieguito12; 26/02/2014 a las 12:11
  #5 (permalink)  
Antiguo 27/02/2014, 14:03
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: explicar mas o menos como trabajar con ajax

Tema solucionado , para que desaparezca el nombre al soltarlo sobre cualquier elemento del menú, lo que hice fue agregar lo siguiente:
Código HTML:
$.ajax({
									url: "pagina.php?id="+ id +"&idmenu=" + idmenu,
									type: "GET",
								}).done(function(response){
							location.reload();
							}).fail(function(jqXHR, textStatus){
							alert("Se ha producido un fallo: " + textStatus);
							});
Lo que hice fue recargar la pagina cuando se termina el proceso en php, entonces en la parte de done le agregue location.reload.

Para el tema de obtener el valor de los elementos li del menú, lo que hice fue agregar un valor a cada li, el mismo lo recupero con una variable var idmenu = $(this).val(); entonces uso eso junto con el id del nombre para pasarlo por ajax.

Si alguien tiene alguna duda de lo que puse aca me avisa.

Saludos.

Etiquetas: ajax, menos
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 02:14.