Foros del Web » Programando para Internet » Jquery »

Subir una imagen al servidor con ajax

Estas en el tema de Subir una imagen al servidor con ajax en el foro de Jquery en Foros del Web. Buenos días comunidad. He estado trabajando con ajax y ahora se me presenta el siguiente problema. Cuando intento subir una imagen con ajax al documento ...
  #1 (permalink)  
Antiguo 03/01/2016, 17:42
 
Fecha de Ingreso: enero-2016
Mensajes: 6
Antigüedad: 8 años, 4 meses
Puntos: 0
Subir una imagen al servidor con ajax

Buenos días comunidad.
He estado trabajando con ajax y ahora se me presenta el siguiente problema.
Cuando intento subir una imagen con ajax al documento .php que recibe los datos no le llega la imagen. Busque ejemplos y los patrones que encontré en estos en que suben las imágenes con evento submit, pero cuando es así en mi código no se sube ningún dato. así que lo probé con el evento click, y tengo esto de aquí solo que, si ya mis datos están empaquetado por data:$("#form_ej").serialize(), no entiendo porque no se sube la imagen
aquí esta mi ajax
Código Javascript:
Ver original
  1. $(function(){
  2.           $(document).on("click","#btn-ej",function(){
  3.                     var url="practicas/process/crearejercicio.php";
  4.                    
  5.                     $.ajax({
  6.                         type:"POST",
  7.                         url:url,
  8.                         data:$("#form_ej").serialize(),
  9.                         success:function(data){
  10.                             $("#mens_ejer").html(data);
  11.                         }
  12.  
  13.                     });
  14.  
  15.                     return false;
  16.                 });
  17.             });
Y este es una muestra de como esta mi html del formulario
Código HTML:
Ver original
  1. <form id="form_ej" method="post" enctype="multipart/form-data">
  2.         <!--Muchos datos-->
  3.                <div class="col-sm-5 col-sm-offset-4">
  4.                 <input  type="file" name='image'>
  5.         </div>
  6.                 <button type='button' id='btn-ej' value='enviar' class='btn btn-success btn-sm'>Crear ejercicio</button>
  7. <div id="mens_ejer"></div>
  8.  
  9. </form>

De antemano gracias por su atencion
  #2 (permalink)  
Antiguo 03/01/2016, 18:35
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Subir una imagen al servidor con ajax

No puedes enviar una imagen como data por ajax, al menos lo que sé.

Necesitas añadir estas lineas a tu script

Código Javascript:
Ver original
  1. var formData = new FormData($("#form_ej")[0]);

En la petición ajax quedaría algo así

Código Javascript:
Ver original
  1. $.ajax({
  2.                         type:"POST",
  3.                         url: url,
  4.                         data: formData,
  5.                         success:function(data){
  6.                             $("#mens_ejer").html(data);
  7.                         }
  8.  
  9.                     });

Y si necesitas enviar más datos en la misma ajax, tendrías que hacerlo por get, añadiendo a url algo así por ejemplo

Código Javascript:
Ver original
  1. url: url+'?campo1='+ campo 1,

Entendiendose por "campo 1" algun input extra
  #3 (permalink)  
Antiguo 04/01/2016, 09:30
 
Fecha de Ingreso: enero-2016
Mensajes: 6
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Subir una imagen al servidor con ajax

que crees que no funciono el codigo :/
  #4 (permalink)  
Antiguo 04/01/2016, 10:48
 
Fecha de Ingreso: diciembre-2015
Ubicación: Valencia
Mensajes: 61
Antigüedad: 8 años, 4 meses
Puntos: 10
Respuesta: Subir una imagen al servidor con ajax

Como te han comentado, necesitas utilizar el formdata

Prueba con esto

Código Javascript:
Ver original
  1. $(document).on('click', '#send', function(e)
  2.                 {
  3.                     var data = new FormData();
  4.                     var input = $('#photos');
  5.                     //Append files infos
  6.                     $.each(input[0].files, function(i, file) {
  7.                         data.append('file-'+i, file);
  8.                     });
  9.                    
  10.                      $.ajax({  
  11.                         url: "test.php",  
  12.                         type: "POST",  
  13.                         data: data,  
  14.                         cache: false,
  15.                         processData: false,  
  16.                         contentType: false,
  17.                         context: this,
  18.                         success: function (msg) {
  19.                              alert(msg);
  20.                          }
  21.                      });
  22.                     e.preventDefault();
  23.                 });
  24.             });

Código HTML:
Ver original
  1. <form method="post" action="" id="form-upload" enctype="multipart/form-data">
  2.             <input type="file" id="photos" name="photos[]" multiple/>
  3.             <input type="submit" id="send"/>
  4.         </form>
  #5 (permalink)  
Antiguo 04/01/2016, 14:14
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Subir una imagen al servidor con ajax

Cierto, me he olvidado del processData y el contentType, prueba con eso ojalá si funciona, saludos :D

Etiquetas: ajax, servidor
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:39.