Foros del Web » Programando para Internet » Javascript »

AJAX no envía los datos (vía GET) pero me dice que si

Estas en el tema de AJAX no envía los datos (vía GET) pero me dice que si en el foro de Javascript en Foros del Web. ¡Hola! Soy bastante novato en AJAX, así que quizás sea una tontería el error, pero no consigo encontrarlo. Son dos cosas, uno de enviar datos ...
  #1 (permalink)  
Antiguo 10/08/2011, 14:10
 
Fecha de Ingreso: septiembre-2009
Mensajes: 210
Antigüedad: 14 años, 7 meses
Puntos: 19
Pregunta AJAX no envía los datos (vía GET) pero me dice que si

¡Hola!
Soy bastante novato en AJAX, así que quizás sea una tontería el error, pero no consigo encontrarlo.
Son dos cosas, uno de enviar datos y otro de eliminarlo, los pongo por separado y explico cada cosa.

El objeto AJAX lo tengo definido de la siguiente forma:

Código Javascript:
Ver original
  1. function objetoAjax(){
  2.     var xmlhttp=false;
  3.     try {
  4.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  5.     } catch (e) {
  6.         try {
  7.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  8.         } catch (E) {
  9.             xmlhttp = false;
  10.         }
  11.     }
  12.  
  13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  14.         xmlhttp = new XMLHttpRequest();
  15.     }
  16.     return xmlhttp;
  17. }

Enviar datos vía GET con AJAX
Tengo un código que, debería enviarme datos a la BD, pero no lo hace, aunque me salta el mensaje de confirmación de que si que lo ha hecho. Pongo el código .js y el .php.

La conexión con la BD está hecha en otro documento, ya que este se usa en otro por medio de un include().

Código PHP:
Ver original
  1. <?php
  2. if($_GET['act'] == "denunciar")
  3. {
  4.     $idcoment = mysql_escape_string($_GET['id']);
  5.     $autor = mysql_escape_string($_GET['autor']);
  6.     if(empty($idcoment))
  7.     {
  8.         echo '<script type="text/javascript">alert("No hay ninguna ID."); history.back();</script>';
  9.     }
  10.     else
  11.     {
  12.         mysql_query("INSERT INTO `denunciacoment` (`idcoment`, `autor`) VALUES ('$idcoment','$autor')");
  13.     }
  14. }
  15. ?>
Código Javascript:
Ver original
  1. // Denunciar comentario con AJAX //
  2. function denunciarcom(id, autor){
  3.     //usaremos un cuadro de confirmacion   
  4.     var denunciar = confirm("¿Está seguro de que desea denunciar el comentario? Si lo hacee, el equipo de la web se encargará de revisarlo y tomar las medidas necesarias.");
  5.     if ( denunciar ) {
  6.         //instanciamos el objetoAjax
  7.         ajax=objetoAjax();
  8.         //uso del medotod GET
  9.         //indicamos el archivo que realizará el proceso de denuncia
  10.         //junto con un valor que representa el id del comentario
  11.         ajax.open("GET", "/comentarios.php?act=denunciar&amp;id="+id+"&amp;autor="+autor);
  12.         ajax.onreadystatechange=function() {
  13.             if (ajax.readyState==4) {
  14.                 //mostrar resultados en esta capa
  15.                 alert("Comentario denunciado");
  16.             }
  17.         }
  18.         //como hacemos uso del metodo GET
  19.         //colocamos null
  20.         ajax.send(null)
  21.     }
  22. }
  23. // Denunciar comentario con AJAX //

Borrar datos vía GET con AJAX
En este caso, el problema es igual, solo que en lugar de enviar datos, necesito que los borre.

Código PHP:
Ver original
  1. $sqldelete = "DELETE FROM `comentarios` WHERE `id` = '".$_GET['id']."'";
  2.         if(mysql_query($sqldelete))
  3.         {
  4.             ?>
  5.             <script type="text/javascript">alert("Comentario eliminado"); window.location = "/admin/comentarios.php";</script>
  6.             <?php
  7.         }
  8.         else
  9.         {
  10.             ?>
  11.             <script type="text/javascript">alert("Comentario no eliminado"); window.location = "/admin/comentarios.php";</script>
  12.             <?php
  13.         }

Código Javascript:
Ver original
  1. // Eliminar comentarios con AJAX //
  2. function deletecom(id){
  3.     //usaremos un cuadro de confirmacion   
  4.     var eliminar = confirm("De verdad desea eliminar este comentario?");
  5.     if ( eliminar ) {
  6.         //instanciamos el objetoAjax
  7.         ajax=objetoAjax();
  8.         //uso del medotod GET
  9.         //indicamos el archivo que realizará el proceso de eliminación
  10.         //junto con un valor que representa el id del comentario
  11.         ajax.open("GET", "/admin/comentarios.php?act=delete&amp;id="+id);
  12.         ajax.onreadystatechange=function() {
  13.             if (ajax.readyState==4) {
  14.                 //mostrar resultados en esta capa
  15.                 alert("Comentario eliminado");
  16.             }
  17.         }
  18.         //como hacemos uso del metodo GET
  19.         //colocamos null
  20.         ajax.send(null)
  21.     }
  22. }
  23. // Eliminar comentarios con AJAX //

Muchísimas gracias a quien pueda ayudarme, sé que es algo largo de leer.
  #2 (permalink)  
Antiguo 10/08/2011, 15:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 210
Antigüedad: 14 años, 7 meses
Puntos: 19
Respuesta: AJAX no envía los datos (vía GET) pero me dice que si

Siento escribir otro post, pero me he dado cuenta de que creo saber donde está el fallo, pero no sé arreglarlo. (Hablo de la eliminación, aunque lo otro quizás sea lo mismo).

He añadido esto
if(ajax.open("GET", "/admin/comentarios.php?act=delete&amp;id="+id)) alert("Si entro"); else alert("No entro");

Debajo del ajax.open, y siempre me devuelve No entro.

¿Alguien sabría arreglarlo? Muchas gracias
  #3 (permalink)  
Antiguo 10/08/2011, 16:14
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: AJAX no envía los datos (vía GET) pero me dice que si

buenas,
¿cómo has de determinar que los datos se enviaron? pregunto porque al final del título dices "pero me dice que si". revisa la consola de error del navegador para determinar si hay algún error obvio en javascript. de momento, no le veo nada extraño al menos en el script del lado cliente. te recomiendo que realices pruebas simples sin la base de datos. es decir, determinar si el servidor recibe los datos y luego devolver una confirmación de parte del servidor. esta confirmación te llegará a la propiedad responseText del objeto ajax. si todo marcha bien, entonces el problema debe ser en el servidor.

Cita:
Iniciado por Ueki
He añadido esto
if(ajax.open("GET", "/admin/comentarios.php?act=delete&amp;id="+id)) alert("Si entro"); else alert("No entro");
el método open siempre devuelve undefined. cuando undefined es convertido a boolean equivale a false. por tanto, el intérprete nunca entrará al bloque de la condición if.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 10/08/2011, 16:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 210
Antigüedad: 14 años, 7 meses
Puntos: 19
Respuesta: AJAX no envía los datos (vía GET) pero me dice que si

Con lo de "y me dice que si" me refiero a que if (ajax.readyState==4) {
//mostrar resultados en este alert
alert("Comentario eliminado con éxito");
}

Me dice "Comentario eliminado con éxito". En el caso del eliminado. "Comentario denunciado" en el caso de denunciacom().

Por lo demás, en la consola no me marca ningún error.

Lo que puse en mi segundo comentario puede ayudar en algo? Es que me di cuenta de que ahí falla algo.

Muchísimas gracias :D
  #5 (permalink)  
Antiguo 10/08/2011, 16:34
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: AJAX no envía los datos (vía GET) pero me dice que si

ahí no falla nada, simplemente es inútil utilizar el valor devuelto por open como condición en la expresión if. tal como comente anteriormente, open siempre devuelve undefined el cual es equivalente a false.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: ajax
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 04:51.