Foros del Web » Programando para Internet » Jquery »

Error al enviar form por jQuery?

Estas en el tema de Error al enviar form por jQuery? en el foro de Jquery en Foros del Web. Hola, tengo una lista donde se muestran distintos comentarios y quiero que al hacer clic en uno, este se abra en un nuevo div, lo ...
  #1 (permalink)  
Antiguo 02/09/2012, 09:50
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Error al enviar form por jQuery?

Hola, tengo una lista donde se muestran distintos comentarios y quiero que al hacer clic en uno, este se abra en un nuevo div, lo que he intentado hacer para conseguir eso es lo siguiente:

Código PHP:

/* Esto se ejecuta tras hacer clic en el comentario y tiene que enviar la id del comentario por jquery a 'mostrar.php' */
function mostrarcomentario() {
                    var idcomentario = $("idcomentario").val();
 
 $.ajax({
         url: 'mostrar.php',
         data:'idcomentario='+ idcomentario,
         type: 'post',   
                 error: function(obj, idcomentario, obj2){
            alert(msg);
         },
         success: function(data){
            loadComent();

     }
      });
 if ((document.getElementById("book").style.display) == 'block') {
  document.getElementById("book").style.display = 'none';
 }else{
  document.getElementById("book").style.display = 'block';
 }

}



//Parte HTML

            $query = mysql_query("SELECT * FROM comentarios WHERE idperfil= '".mysql_real_escape_string($idperfil)."' ORDER BY fecha DESC");
         $numero = mysql_num_rows($query);

            if($numero>=1){
            ?>
            <table class="entradas"  >
                        <?php
   
while ($row mysql_fetch_array($query)){
      
      
$english=$row["fecha"];
      
$fecha=strftime('  %d de %B de %Y a las(la) %H:%M',strtotime($english))
      
?>
         <tr onclick="mostrarcomentario();">
            <td style='display:none;'><input type="hidden" name="respuestade" value="<?php echo $idsesion ?>" /></td>
            <td style='display:none;'><input type="hidden" name="idcomentario" value="<?php echo $row['id']?>" /></td>
            <td class="comentario"><?php echo $row['mensaje'?></td>
         </tr><tr>
         <td class="data"><br/><?php echo $fecha?></td>
         </tr>
     
      <?php
   
}
?></table> <?php }
El HTML es un php que mediante un while saca todos los comentarios del usuario del que estamos vsitando el perfil (es un perfil de usuario) A ver si encontráis mi error porqué ya llevo unos días buscando un rato el error y nunca lo encuentro, muchas gracias desde ya!
  #2 (permalink)  
Antiguo 02/09/2012, 17:10
Avatar de YYs86  
Fecha de Ingreso: abril-2012
Ubicación: Salamanca
Mensajes: 136
Antigüedad: 12 años, 7 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Pues puedes empezar por arreglar:

Código Javascript:
Ver original
  1. var idcomentario = $("idcomentario").val();

por

Código Javascript:
Ver original
  1. var idcomentario = $(this).attr('id');

Ya que $("idcomentario") como tal no apuntaría a ningún lado...

¿Tu función loadComent() funciona bien?¿La has probado?
__________________
Web developer:

http://xtremgaming.es
http://leaderleague.com
  #3 (permalink)  
Antiguo 02/09/2012, 18:16
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Cita:
Iniciado por YYs86 Ver Mensaje
Pues puedes empezar por arreglar:

Código Javascript:
Ver original
  1. var idcomentario = $("idcomentario").val();

por

Código Javascript:
Ver original
  1. var idcomentario = $(this).attr('id');

Ya que $("idcomentario") como tal no apuntaría a ningún lado...

¿Tu función loadComent() funciona bien?¿La has probado?
Hola, para empezar, muchas gracias por la ayuda ya que nadie últimamente resuelve mis dudas... Lo segundo es que lamentablemente aún no funciona, lo he cambiado tal y como me has dicho, pero me sigue dando el mismo error, y la funcion loadComent; es simplemente esto:

Código HTML:
// el div 'encuestion' es donde cargo el comentario

        function loadComent(){
     //Funcion para cargar el muro
     $("#encuestion").load('mostrar.php');
  }
Ojalá me ayudes a solucionar esto, muchísimas gracias!
  #4 (permalink)  
Antiguo 03/09/2012, 01:07
Avatar de YYs86  
Fecha de Ingreso: abril-2012
Ubicación: Salamanca
Mensajes: 136
Antigüedad: 12 años, 7 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

No necesitas utilizar la función load content... con ésto ya te valdría:

Código Javascript:
Ver original
  1. $.ajax({
  2.          url: 'mostrar.php',
  3.          data:'idcomentario='+ idcomentario,
  4.          type: 'post',    
  5.                  error: function(obj, idcomentario, obj2){
  6.             alert(msg);
  7.          },
  8.          success: function(data){
  9.             $("#encuestion").html(data);
  10.  
  11.      }
  12.       });

Por otra parte el error que te da podrías resolverlo utilizando:

Código Javascript:
Ver original
  1. function mostrarcomentario() {
  2.  
  3. var dataString = $(this).find('form').serialize();
  4.  
  5. $.ajax({
  6.          url: 'mostrar.php',
  7.          data: dataString,
  8.          type: 'post',    
  9.                  error: function(obj, idcomentario, obj2){
  10.             alert(msg);
  11.          },
  12.          success: function(data){
  13.             $("#encuestion").html(data);
  14.  
  15.      }
  16.       });
  17.  
  18. if($('#book').is(':hidden')){
  19. $('#book').css('display','none');
  20. }else{
  21. $('#book').css('display','block');
  22. }
  23.  
  24. }

Prueba y medices.
__________________
Web developer:

http://xtremgaming.es
http://leaderleague.com
  #5 (permalink)  
Antiguo 03/09/2012, 05:28
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Cita:
Iniciado por YYs86 Ver Mensaje
No necesitas utilizar la función load content... con ésto ya te valdría:

Código Javascript:
Ver original
  1. $.ajax({
  2.          url: 'mostrar.php',
  3.          data:'idcomentario='+ idcomentario,
  4.          type: 'post',    
  5.                  error: function(obj, idcomentario, obj2){
  6.             alert(msg);
  7.          },
  8.          success: function(data){
  9.             $("#encuestion").html(data);
  10.  
  11.      }
  12.       });

Por otra parte el error que te da podrías resolverlo utilizando:

Código Javascript:
Ver original
  1. function mostrarcomentario() {
  2.  
  3. var dataString = $(this).find('form').serialize();
  4.  
  5. $.ajax({
  6.          url: 'mostrar.php',
  7.          data: dataString,
  8.          type: 'post',    
  9.                  error: function(obj, idcomentario, obj2){
  10.             alert(msg);
  11.          },
  12.          success: function(data){
  13.             $("#encuestion").html(data);
  14.  
  15.      }
  16.       });
  17.  
  18. if($('#book').is(':hidden')){
  19. $('#book').css('display','none');
  20. }else{
  21. $('#book').css('display','block');
  22. }
  23.  
  24. }

Prueba y medices.
Hola, gracias por contestar y por el tiempo que te has tomado, todavía, no obstante, no me funciona, tal y como me dejaste la funcion no se me abría el div así que le hice un cambio insignificante para que se mostrara el div (porque tiene que estar oculto y al hacer clic mostrarse) y así me ha quedado:

Código PHP:
function mostrarcomentario() {
 
var 
dataString = $(this).find('form').serialize();
 
$.
ajax({ 
         
url'mostrar.php'
         
data'dataString='dataString
         
type'post',    
                 
error: function(objidcomentarioobj2){ 
            
alert(msg); 
         }, 
         
success: function(data){ 
            $(
"#encuestion").html(data);
 
     } 
      });
 
 if ((
document.getElementById("book").style.display) == 'block') { 
  
document.getElementById("book").style.display 'none'
 }else{ 
  
document.getElementById("book").style.display 'block'
 } 
 

Me sigue saliendo el mismo error, cuelgo también el script de mostrar.php:

Código PHP:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
<?php
require_once("./include/class.inputfilter.php");
$ifilter = new InputFilter();
setlocale(LC_TIME'es_ES');
include(
'config.php');
$conexion=conectar();
?>
<meta http-equiv="content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>

<?php

$idcomentario 
$ifilter->process($_POST['idcomentario']);

$muestra=mysql_query("SELECT * FROM comentarios WHERE id = '".mysql_real_escape_string($idcomentario)."' ");
$fetcharray=mysql_fetch_array($muestra);
$comentario$fetcharray("mensaje");
$dequien$fetcharray("idperfil");
$english=$fetcharray["fecha"];

$sacar=mysql_query("SELECT * FROM registrados WHERE id= '".mysql_real_escape_string($dequien)."' ");
            
$sacado=mysql_fetch_array($sacar);
            
            
$name=$sacado["nombre"];
            
$surname=$sacado["apellidos"];
            

      
$fecha=strftime(' %d de %B de %Y a las(la) %H:%M',strtotime($english))
      
?>
      <table name="entradas" class="entradas">
            
            <tr>
                <td class="emisor"><?php echo $name $surname  ?></td>
            </tr>
         <tr>
            <td class="comentario"><?php echo $comentario ?></td>
         </tr><tr>
         <td class="data"><br/><?php echo $fecha?></td>
         </tr>
         </div>
      </table>
      <?php


?>
    </body>
</html>
A ver si lo podemos solucionar, muchas gracias :)
  #6 (permalink)  
Antiguo 03/09/2012, 05:47
Avatar de YYs86  
Fecha de Ingreso: abril-2012
Ubicación: Salamanca
Mensajes: 136
Antigüedad: 12 años, 7 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Si quieres ir depurando un poco mejor el error trata de ejecutar tu mostrar.php con un $_POST de toda la vida... si solucionas esa parte tu script mostrarcomentario() te funcionará correctamente.
__________________
Web developer:

http://xtremgaming.es
http://leaderleague.com
  #7 (permalink)  
Antiguo 03/09/2012, 09:21
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Hola, he hecho lo que me has dicho y con un form normal funciona perfectamente, pero se me abre en otra ventana y lo que quiero es que se abra en ese div, al intentarlo abrir ahí me sale que no le llega el idcomentario, a ver si lo solucionamos, que quiero avanzar y me he quedado atascado en esta parte :S muchas gracias.

EDITO: Llevo toda la tarde con este error y he estado buscando mucho, ahora mismo tengo esto, lo he metido en un script a parte para ver si ahí estaban los problemas pero nada.... Os dejo los códigos:

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">



 <head>
  <?php
  include('config.php');
  $conexion=conectar();
  
  ?>
  <title>Muro Tipo Facebook</title>
  
  <!-- Se incluye el framework de JavaScript "JQuery" -->
  <script type="text/javascript" src="jquery.js"></script>
  <script type="text/javascript">
  function loadWall(){
     $("#wall").load('mostrar.php');

  }
  
  //Cuando el documento esta listo carga el muro

  </script>
   
  
 </head>
 <body>
 <div id="wrapper">
 
    <div id="form">
            <?php
            $idperfil="11";
            $idsesion="4";
            $query = mysql_query("SELECT * FROM comentarios WHERE idperfil= '".mysql_real_escape_string($idperfil)."' ORDER BY fecha DESC");
         $numero = mysql_num_rows($query);

            if($numero>=1){
            ?>
<div class="entradas">
                        <?php
   while ($row = mysql_fetch_array($query)){
      
      $english=$row["fecha"];
      $fecha=strftime('  %d de %B de %Y a las(la) %H:%M',strtotime($english))
      ?>
<form action="javascript: mostrarcomentario(); " method="post" id="formcomentarios" >
         <div class="diventradas" >
            <input type="hidden" name="idcomentario" value="<?php echo $row['id']?>" />
            <p class="comentario" ><?php echo $row['mensaje'] ?></p>
            <p class="data"><?php echo $fecha?></p>
            <input type="submit"/>
         </div>
     </form>
      <?php
   }
?> </div><?php }?>
    <div id="wall"></div>
    </div>
 </div>
 
<script>
   function mostrarcomentario(){
   
      var idcomentario = $("idcomentario").val();
      

      $.ajax({
         url: 'mostrar.php',
         data: 'idcomentario='+ idcomentario,
         type: 'get',
         error: function(obj, idcomentario, obj2){
            alert(idcomentario);
         },
         success: function(data){
            loadWall();
         }
      });      
   };
</script>
 </body>
</html> 
mostrar.php
Código PHP:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
<?php

include('config.php');
$conexion=conectar();
?>
<meta http-equiv="content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>

<?php

$idcomentario 
$_POST['idcomentario'];

$muestra=mysql_query("SELECT * FROM comentarios WHERE id = '".mysql_real_escape_string($idcomentario)."' ");
$fetcharray=mysql_fetch_array($muestra);
$comentario$fetcharray["mensaje"];
$dequien$fetcharray["idperfil"];
$english=$fetcharray["fecha"];

$sacar=mysql_query("SELECT * FROM registrados WHERE id= '".mysql_real_escape_string($dequien)."' ");
            
$sacado=mysql_fetch_array($sacar);
            
            
$name=$sacado["nombre"];
            
$surname=$sacado["apellidos"];
            

      
$fecha=strftime(' %d de %B de %Y a las(la) %H:%M',strtotime($english))
      
?>
      <table name="entradas" class="entradas">
            
            <tr>
                <td class="emisor"><?php echo $name $surname  ?></td>
            </tr>
         <tr>
            <td class="comentario"><?php echo $comentario ?></td>
         </tr><tr>
         <td class="data"><br/><?php echo $fecha?></td>
         </tr>
         </div>
      </table>
      <?php


?>
    </body>
</html>


Continua con el mismo error, no recibe la variable idcomentario, que alguien me ayude por favor, lo que no entiendo es que tengo otra página que hace lo mismo pero con esto no me funciona!!! estoy desesperado ya por esto...

Última edición por ananda; 03/09/2012 a las 12:03
  #8 (permalink)  
Antiguo 05/09/2012, 14:27
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Alguien me puede ayudar?...
  #9 (permalink)  
Antiguo 05/09/2012, 14:42
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Error al enviar form por jQuery?

tu error creo que esta en esto

$("idcomentario")

deberia ser

$("#idcomentario") y asigna un ID a tu input
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #10 (permalink)  
Antiguo 05/09/2012, 14:43
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Cita:
Iniciado por Dradi7 Ver Mensaje
tu error creo que esta en esto

$("idcomentario")

deberia ser

$("#idcomentario") y asigna un ID a tu input
Vale pero fijate en que el input sale de un while, y por lo tanto va a haber varios inputs con el mismo id, eso generaría un error, me equivoco?
  #11 (permalink)  
Antiguo 06/09/2012, 01:46
Avatar de YYs86  
Fecha de Ingreso: abril-2012
Ubicación: Salamanca
Mensajes: 136
Antigüedad: 12 años, 7 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Si, si tienes mas contenedores con la misma id en la página seguramente no haga lo que tu requieres.

Una posible solución es lanzar tu función mediante un <input type="button"> en vez de tu "submit" y con el evento onclick, y pasarle tu id capturada desde ahí:

Código Javascript:
Ver original
  1. <input type="button" onclick="mostrarcomentario($(this).parent().find('#idcomentario').val());">

Acuerdate de cambiar tu formulario también:

Código HTML:
Ver original
  1. <form method="post" id="formcomentarios" >
  2.     <div class="diventradas" >
  3.         <input type="hidden" name="idcomentario" id="idcomentario" value="<?php echo $row['id']?>" />
  4.         <p class="comentario" ><?php echo $row['mensaje'] ?></p>
  5.         <p class="data"><?php echo $fecha?></p>
  6.         <input type="button" onclick="mostrarcomentario($(this).parent().find('#idcomentario').val());">
  7.     </div>
  8. </form>

Y también cambiar tu función para recoger el id enviado:

Código Javascript:
Ver original
  1. function mostrarcomentario(id){      
  2.  
  3.       $.ajax({
  4.          url: 'mostrar.php',
  5.          data: 'idcomentario='+ id,
  6.          type: 'get',
  7.          error: function(obj, idcomentario, obj2){
  8.             alert(idcomentario);
  9.          },
  10.          success: function(data){
  11.             loadWall();
  12.          }
  13.       });      
  14.    };
__________________
Web developer:

http://xtremgaming.es
http://leaderleague.com
  #12 (permalink)  
Antiguo 07/09/2012, 08:31
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Cita:
Iniciado por YYs86 Ver Mensaje
Si, si tienes mas contenedores con la misma id en la página seguramente no haga lo que tu requieres.

Una posible solución es lanzar tu función mediante un <input type="button"> en vez de tu "submit" y con el evento onclick, y pasarle tu id capturada desde ahí:

Código Javascript:
Ver original
  1. <input type="button" onclick="mostrarcomentario($(this).parent().find('#idcomentario').val());">

Acuerdate de cambiar tu formulario también:

Código HTML:
Ver original
  1. <form method="post" id="formcomentarios" >
  2.     <div class="diventradas" >
  3.         <input type="hidden" name="idcomentario" id="idcomentario" value="<?php echo $row['id']?>" />
  4.         <p class="comentario" ><?php echo $row['mensaje'] ?></p>
  5.         <p class="data"><?php echo $fecha?></p>
  6.         <input type="button" onclick="mostrarcomentario($(this).parent().find('#idcomentario').val());">
  7.     </div>
  8. </form>

Y también cambiar tu función para recoger el id enviado:

Código Javascript:
Ver original
  1. function mostrarcomentario(id){      
  2.  
  3.       $.ajax({
  4.          url: 'mostrar.php',
  5.          data: 'idcomentario='+ id,
  6.          type: 'get',
  7.          error: function(obj, idcomentario, obj2){
  8.             alert(idcomentario);
  9.          },
  10.          success: function(data){
  11.             loadWall();
  12.          }
  13.       });      
  14.    };
Muchísimas gracias, ya me funciona a la perfeccion! Gracias
  #13 (permalink)  
Antiguo 07/09/2012, 08:36
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Error al enviar form por jQuery?

Pero si ya estas usando esta linea

Código Javascript:
Ver original
  1. <input type="button" onclick="mostrarcomentario($(this).parent().find('#idcomentario').val());">

no te bastaría cambiarla con el PHP así

Código Javascript:
Ver original
  1. <input type="button" onclick="mostrarcomentario(<?php echo $row['id']?>);">
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #14 (permalink)  
Antiguo 08/09/2012, 03:20
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Error al enviar form por jQuery?

Cita:
Iniciado por Dradi7 Ver Mensaje
Pero si ya estas usando esta linea

Código Javascript:
Ver original
  1. <input type="button" onclick="mostrarcomentario($(this).parent().find('#idcomentario').val());">

no te bastaría cambiarla con el PHP así

Código Javascript:
Ver original
  1. <input type="button" onclick="mostrarcomentario(<?php echo $row['id']?>);">
Justamente, he tenido un problema con esto usándolo en otro script, he vuelto al tema para revisar errores y me he encontrado con tu respuesta, la he usado y ya ha funcionado en todos los scripts, me quedo con esa, gracias a ambos! :)

Etiquetas: ajax, html, input, php, formulario
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 17:40.