La carga de archivos HTML con jQuery/Ajax no funciona

Estoy tratando de incorporar un código del usuario de Stack DannYo comentar aquí, sin embargo, mi versión de su código no parece funcionar. Las funciones de error y "beforesend" regresan cada vez.

HTML

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" id="file">
    <input type="email" id="sender" name="sender" required>
    <input type="email" id="receiver" name="receiver" required>
    <input type="text" id="message" name="message">
    <button id="send" class="button">Send it</button>
</form>

JavaScript

$("form").on("submit", function() {

    var formData = new FormData($('form')[0]);

    $.ajax({
        url: 'upload.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr

            myXhr = $.ajaxSettings.xhr();

            if (myXhr.upload) { // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }

            return myXhr;

        },

        //Ajax events
        beforeSend: function() { console.log("before send function works"); },
        success: function(e) {
            console.log(e);
        },
        error: function() { console.log("error function works"); },

        // Form data
        data: formData,

        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });

    return false;

});

PHP

Para propósitos de prueba, el upload.php archivo solo tiene <?php echo "success"; ?>

Con la herramienta de desarrollo de red de Chrome, no veo que mi archivo se transfiera a ninguna parte. ¿Alguien vio un agujero evidente en mi código? Gracias

preguntado el 31 de julio de 12 a las 14:07

The error and the "beforesend" functions return each time. ¿Qué error te da? -

El registro de la consola solo imprime lo que especifiqué en la función de error: "la función de error funciona" -

1 Respuestas

Si se llama a su función de error, lo más probable es que la respuesta esté dentro de su resultado. Verifique qué error se devuelve como muestra error function works no te hace bien

error: function(xhr, status, error) {
    alert(xhr.responseText);
    // OR
    alert(status + " : " + error);
}

Editar: También para tener en cuenta, creo que debe manejar el guardado del archivo que está tratando de cargar. Tsu tutorial para cargar archivos en php puede ser útil.

Respondido 01 ago 12, 13:08

Estoy de acuerdo en que mi función de error es una tontería. Usando el que me diste, solo actualiza la página pero no antes de mostrar esto en la consola: Uncaught TypeError: Cannot ready property 'Message' of undefined - izolato

@muppethead Eso es interesante. He actualizado mi respuesta con algo más que he hecho antes. - jose mein

¡Ajá! Sí, su edición resultó útil. el error dijo progressHandlingFunction no se definió. Entonces, agregué la función de manejo de progreso y ahora el formulario no devuelve la función de error. Pero, en cambio, aparece un error de servidor interno 500. ¿Es porque estoy trabajando localmente con MAMP? - izolato

En realidad, olvídalo. Mi archivo php había comentado mal el texto que causó el 500 ISE. Ahora todo funciona como debería. Gracias por tu ayuda Josh- izolato

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.