Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] $.ajax(); no responde

Estas en el tema de $.ajax(); no responde en el foro de Jquery en Foros del Web. Buenas. Necesito que una página inserte unos datos de un formulario en una BD MySql pero sin que se "recargue" la página, por eso recurrí ...
  #1 (permalink)  
Antiguo 06/04/2014, 11:59
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 10 meses
Puntos: 3
$.ajax(); no responde

Buenas.
Necesito que una página inserte unos datos de un formulario en una BD MySql pero sin que se "recargue" la página, por eso recurrí a la librería jQuery, especificamente a $.ajax();
La cosa es que sigo las instrucciones pero no va. Aquí dejo el código:
Código Javascript:
Ver original
  1. function insertar() {
  2.         var datos_insertar={};
  3.         for (i=0; i<nombrecol.length; i++) {
  4.             datos_insertar[nombrecol[i]]=document.getElementById(nombrecol[i]).value;
  5.         }
  6.         alert('Se envia');
  7.         var request = $.ajax({
  8.           url: "insertar.php",
  9.           type: "POST",
  10.           data: datos_insertar,
  11.         });
  12.          
  13.         request.done(function( msg ) {
  14.           alert( msg );
  15.         });
  16.          
  17.         request.fail(function( jqXHR, textStatus ) {
  18.           alert( "Request failed: " + textStatus );
  19.         });
  20.     }
Y el form:
Código HTML:
<form class="formulario_clientes" id="formulario_clientes" onSubmit="insertar()">
                <label for="codigo">Codigo: </label><input name="codigo" id="codigo" value="" type="text" size="3" disabled><br>
                <label for="nombre">Nombre: </label><input  name="nombre" id="nombre" value="" type="text" size="77" disabled><br>
                <label for="domicilio">Domicilio: </label><input name="domicilio" id="domicilio" value="" size="77" type="text" disabled><br>
                <label for="cp">Código Postal: </label><input name="cp" id="cp" value="" size="5" type="text" disabled required><br>
				<label for="provincia">Provincia: </label><input name="provincia" id="provincia" value="" size="77" type="text" disabled><br>
            	<label for="dni">DNI: </label><input name="dni" id="dni" value="" size="10" type="text" disabled required><br>
            	<label for="telefono">Teléfono: </label><input name="telefono" id="telefono" value="" size="10" type="text" disabled>
            	<label style="width:50px;" for="movil">Móvil: </label><input name="movil" id="movil" value="" size="10" type="text" disabled>
            	<label style="width:50px;" for="fax">Fax: </label><input name="fax" id="fax" value="" size="10" type="text" disabled><br>
            	<label for="email">Email: </label><input name="email" id="email" value="" size="77" type="text" disabled><br>
            	<label for="observaciones">Observaciones: </label><textarea name="observaciones" id="observaciones" cols="59" disabled></textarea><br>
            	<button type="submit">Enviar</button>
            </form> 
Y la página insertar.php que lo único que hace es introducir los valores del form en la bd y mostrar el msg de si se ha hecho correctamente o no:
Código PHP:
<?php
include("../Conexiones/conexion.php");

$nombre=$_POST['nombre'];
$cod=$_POST['codigo'];

$sql="INSERT INTO prueba (nom,cod) values('".$nombre."','".$cod."')";
$res=$db->query($sql);

if(
$res)
    echo 
'Accion exitosa';
else
    echo 
"Mal";    
?>
Estoy muy seguro de que es una tontería pero no la veo.
Atentamente Cristian Molina

Última edición por legomolina; 07/04/2014 a las 08:44
  #2 (permalink)  
Antiguo 07/04/2014, 12:24
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: $.ajax(); no responde

Sería más práctico si recogieras los datos del formulario con el método serialize de jQuery. Con esto, la función insertar() ya no sería necesaria.

Código Javascript:
Ver original
  1. $("#formulario_clientes").submit(function(e){
  2.     e.preventDefault();
  3.     var request = $.ajax({
  4.         url: "insertar.php",
  5.         type: "POST",
  6.         data: $(this).serialize()
  7.     });
  8.          
  9.     request.done(function( msg ) {
  10.         alert( msg );
  11.     });
  12.          
  13.     request.fail(function( jqXHR, textStatus ) {
  14.         alert( "Request failed: " + textStatus );
  15.     });
  16. });

Por cierto, en la línea de la data, estás colocando una coma que no es necesaria pues es el último atributo del método 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 07/04/2014, 12:27
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: $.ajax(); no responde

Gracias, de todas formas lo he resuelto con ajax como tal que así parece que funciona perfecto. Por cierto, me di cuenta de la coma, lo arreglé, y seguía funcionando mal. Si quieres el código me lo dices y lo pongo.
  #4 (permalink)  
Antiguo 07/04/2014, 12:39
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: $.ajax(); no responde

Si lo resolviste, sería bueno que lo publiques para que aquellos usuarios que tengan el mismo problema que tuviste al inicio, sepan cómo solucionarlo.

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
  #5 (permalink)  
Antiguo 07/04/2014, 12:42
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: $.ajax(); no responde

Voy
Código Javascript:
Ver original
  1. function insertar() {
  2.         var datos="";
  3.         var value="";
  4.         var nombre="";
  5.         var codigo=document.getElementById('codigo').value;
  6.         var xmlhttp=new XMLHttpRequest();
  7.        
  8.         for(i=0;i<nombrecol.length;i++) {
  9.             nombre=document.getElementById(nombrecol[i]).id;
  10.            
  11.             if(document.getElementById(nombrecol[i]).value=='')
  12.                 value="---";
  13.             else
  14.                 value=document.getElementById(nombrecol[i]).value;
  15.            
  16.             datos+=nombre+"="+value+"&";
  17.         }
  18.        
  19.         datos+="formulario="+document.getElementById('campo_oculto').value;
  20.    
  21.         if(editar_reg) {
  22.             datos+="&req=editar&codigo="+codigo;           
  23.             editar_reg=false;
  24.         } else {
  25.             datos+="&req=nuevo";
  26.             nuevo_reg=false;
  27.         }
  28.         xmlhttp.open("POST","registros.php",false);
  29.         xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  30.         xmlhttp.send(datos);
  31.         alert(xmlhttp.responseText);
  32.     }
Obviamente lo he retocado porque lo he necesitado para otras funciones pero así funciona.
El archivo registros.php:
Código PHP:
<?php
include("../Conexiones/conexion.php");

switch(
$_POST['req']) {
    case 
"nuevo":
        
$sql="INSERT INTO ".$_POST['formulario']." (codigo,nombre,domicilio,cp,provincia,dni,telefono,movil,fax,email,observaciones) values('".$_POST['codigo']."','".$_POST['nombre']."','".$_POST['domicilio']."','".$_POST['cp']."','".$_POST['provincia']."','".$_POST['dni']."','".$_POST['telefono']."','".$_POST['movil']."','".$_POST['fax']."','".$_POST['email']."','".$_POST['observaciones']."')";
    break;
    
    case 
"borrar":
        if(isset(
$_POST['nombre']) && ($_POST['nombre']!='' || $_POST['nombre']!='---'))
            
$sql="DELETE FROM ".$_POST['formulario']." WHERE codigo='".$_POST['codigo']."' AND nombre='".$_POST['nombre']."'";
        else 
            
$sql="DELETE FROM ".$_POST['formulario']." WHERE codigo='".$_POST['codigo']."' AND email='".$_POST['email']."'";
    break;
    case 
"editar":
        
$sql="UPDATE ".$_POST['formulario']." SET nombre='".$_POST['nombre']."',domicilio='".$_POST['domicilio']."',cp='".$_POST['cp']."',provincia='".$_POST['provincia']."',dni='".$_POST['dni']."',telefono='".$_POST['telefono']."',movil='".$_POST['movil']."',fax='".$_POST['fax']."',email='".$_POST['email']."',observaciones='".$_POST['observaciones']."' WHERE codigo='".$_POST['codigo']."'";
    break;
}

$res=$db->query($sql);

if(
$res)
    echo 
"Accion exitosa";
else
    echo 
mysqli_error($db);
?>

Etiquetas: ajax, formulario, input, javascript, php, responde, 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 05:55.