Foros del Web » Programando para Internet » Javascript »

Modernizar código AJAX

Estas en el tema de Modernizar código AJAX en el foro de Javascript en Foros del Web. Buenas, Me he encontrado este código con el fin de implementar un sistema de comentarios. El formulario "formulario_registro" está compuesto únicamente por un textarea "text" ...
  #1 (permalink)  
Antiguo 03/03/2016, 12:53
 
Fecha de Ingreso: febrero-2016
Mensajes: 17
Antigüedad: 8 años, 2 meses
Puntos: 0
Modernizar código AJAX

Buenas,

Me he encontrado este código con el fin de implementar un sistema de comentarios. El formulario "formulario_registro" está compuesto únicamente por un textarea "text" y un botón de submit que lleva a esta función mediante el evento onsubmit:

Código HTML:
Ver original
  1. <form action="" class="formulario" name="formulario_registro" method="post" onsubmit="enviarComentario(); return false">
  2.      <div class="input-group">
  3.     <textarea class="form-control" id="textarea" name="text" rows="3"></textarea>
  4.     </div>
  5.      <input type="submit" id="btn-submit" class="btn btn-primary" value="Comentar"  name="comenta">
  6. </form>

El código JS en cuestión es este:

Código Javascript:
Ver original
  1. <script>
  2. function objetoAjax(){
  3.     var xmlhttp=false;
  4.     try {
  5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  6.     } catch (e) {
  7.  
  8.     try {
  9.         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  10.     } catch (E) {
  11.         xmlhttp = false;
  12.     }
  13. }
  14.  
  15. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  16.       xmlhttp = new XMLHttpRequest();
  17.     }
  18.     return xmlhttp;
  19. }
  20.  
  21. //Función para recoger los datos del formulario y enviarlos por post  
  22. function enviarComentario(){
  23.  
  24.   //div donde se mostrará lo resultados
  25.   divResultado = document.getElementById('comments');
  26.   //recogemos los valores de los inputs
  27.   text=document.formulario_registro.text.value;
  28.   var id = "<?php echo $_GET['id']; ?>" ;
  29.   var usu = "<?php echo $_SESSION['userid']; ?>" ;
  30.   var nombre = "<?php echo $_SESSION['name']; ?>" ;
  31.  
  32.   //instanciamos el objetoAjax
  33.   ajax=objetoAjax();
  34.  
  35.   //uso del metodo POST
  36.   //archivo que realizará la operacion de inserción en BBDD
  37.   //inscom.php
  38.   ajax.open("POST", "inscom.php",true);
  39.   //cuando el objeto XMLHttpRequest cambia de estado, la función se inicia
  40.   ajax.onreadystatechange=function() {
  41.       //la función responseText tiene todos los datos pedidos al servidor
  42.     if (ajax.readyState==4) {
  43.         //mostrar resultados en esta capa
  44.         divResultado.innerHTML = ajax.responseText
  45.         //llamar a funcion para limpiar los inputs
  46.         LimpiarCampos();
  47.     }
  48.  }
  49.     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  50.     //enviando los valores a registro.php para que inserte los datos
  51.     ajax.send("id="+id+"&login="+usu+"&nombre="+nombre+"&text="+text)
  52. }
  53.  
  54. //función para limpiar los campos
  55. function LimpiarCampos(){
  56.   document.formulario_registro.text.value="";
  57.   document.formulario_registro.text.focus();
  58. }
  59.  
  60. </script>

Este código es del 2010 y me gustaría saber como se podría implementar el código anterior con la función $.ajax de jQuery o si existe una manera más moderna de hacerlo.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 03/03/2016, 13:22
 
Fecha de Ingreso: febrero-2016
Mensajes: 17
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Modernizar código AJAX

Actualizo:

He realizado este código pero no me funciona...

Código Javascript:
Ver original
  1. <script>
  2.  
  3. //Función para recoger los datos del formulario y enviarlos por post  
  4. function enviarComentario(){
  5.  
  6.   //div donde se mostrará lo resultados
  7.   divResultado = document.getElementById('comments');
  8.   //recogemos los valores de los inputs
  9.   text=document.formulario_registro.text.value;
  10.   var id = "<?php echo $_GET['id']; ?>" ;
  11.   var usu = "<?php echo $_SESSION['userid']; ?>" ;
  12.   var nombre = "<?php echo $_SESSION['name']; ?>" ;
  13.  
  14.   //instanciamos el objetoAjax
  15.  
  16.  $.ajax({
  17.   method: "POST",
  18.   url: "inscom.php",
  19.   data: { id: id, login:usu, nombre:nombre , text:text },
  20.   dataType: "html"
  21. })
  22.   .done(function( msg ) {
  23.     $("#comments").html(msg);
  24.     LimpiarCampos();
  25.   });
  26.  
  27.  
  28.  
  29. //función para limpiar los campos
  30. function LimpiarCampos(){
  31.   document.formulario_registro.text.value="";
  32.   document.formulario_registro.text.focus();
  33. }
  34.  
  35. </script>

El contenido de inscom.php es el siguiente:

Código PHP:
Ver original
  1. <?php
  2.    
  3.   $id=$_POST['id'];
  4.   $usu=$_POST['login'];
  5.   $nombre=$_POST['nombre'];
  6.   $text=$_POST['text'];
  7.  
  8.    
  9.    try{ //Intenta conectar con la base de datos y si no lo consigues captura el objeto del error (catch) y haz lo que yo te diga
  10.    
  11.     $base= new PDO('mysql:host=localhost; dbname=pelipedia','root','');
  12.    
  13.     $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14.    
  15.     $base->exec("SET CHARACTER SET utf8");
  16.    
  17.     $sql="INSERT INTO comentarios (idusu, idpag, nombreusu, coment) VALUES (:idusu,:id,:nom,:coment)";
  18.    
  19.     $resultado=$base->prepare($sql);
  20.    
  21.     $resultado->execute(array(":idusu"=>$usu,":id"=>$id,":nom"=>$nombre,":coment"=>$text));
  22.    
  23.     $resultado->closeCursor(); //Cierra cursor
  24.    
  25.     }catch(Exception $e){
  26.        
  27.         die("Error: " . $e->getMessage() . "<br>Código del error: " . $e->getCode() . "<br>Línea: " . $e->getLine()); //Matar proceso y sacar este mensaje (mensaje del objeto error
  28.        
  29.     }finally{ //Tanto si tiene un error como si no ejecuta esto
  30.        
  31.         $base=null; //Vaciamos la memoria  
  32.     }
  33.    
  34. include('consulta.php');
  35.  
  36. ?>

Y el de consulta.php ...

Código PHP:
Ver original
  1. <?php
  2.    
  3.      try{
  4.    
  5.         $base= new PDO('mysql:host=localhost; dbname=pelipedia','root','');
  6.     $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7.     $base->exec("SET CHARACTER SET utf8");
  8.     $sql="SELECT * FROM comentarios WHERE idpag = :id"; // :n_art Marcador
  9.     $resultado=$base->prepare($sql);
  10.     $resultado->execute(array(":id"=>$id));
  11.  
  12.     while($registro=$resultado->fetch(PDO::FETCH_ASSOC)){
  13.         echo "<div id='comtot'> ";
  14.     echo "<p><strong>" . $registro['nombreusu'] . " dice: </strong></p><br>";
  15.     echo "<p>" . $registro['coment'] . "";
  16.     echo "</div>";
  17.     }
  18.    
  19.     $resultado->closeCursor(); //Cierra cursor
  20.    
  21.     }catch(Exception $e){
  22.        
  23.         die("Error: " . $e->getMessage() . "<br>Código del error: " . $e->getCode() . "<br>Línea: " . $e->getLine()); //Matar proceso y sacar este mensaje (mensaje del objeto error
  24.        
  25.     }finally{ //Tanto si tiene un error como si no ejecuta esto
  26.        
  27.         $base=null; //Vaciamos la memoria
  28.        
  29.     }
  30. ?>

Con el código obsoleto me funcionaba bien.
  #3 (permalink)  
Antiguo 03/03/2016, 17:17
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Modernizar código AJAX

Hola:

Parece que lo que tienes es correcto... no entiendo querer cargar una librería que sin duda ralentizaría algo el tiempo de carga de la página en muchos casos (no todos tienen fibra óptica ni 4G)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 03/03/2016, 19:13
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: Modernizar código AJAX

Utilizar una librería no es sinónimo de "modernizar" un algoritmo. Si realmente quieres hacerlo de una forma acorde a los tiempos actuales, utiliza promesas.

__________________
«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

Etiquetas: ajax, evento, formulario, funcion, html, input, jquery, js, php, valor
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 08:56.