Estoy tratando de devolver un archivo de Excel a través de un Ajax POST al servidor, el servidor genera el .archivo xls, sin embargo no pasa a través de la parte delantera, creo que tiene algo que ver con cómo estoy gestión de la respuesta.

Se debe dar inicio a un archivo de descarga de el archivo de Excel. Originalmente tenía dataType JSON, pero después de buscar a través de los hilos que me imagino que es algo que ver con el dataType formato y la .done función, pero no puede trabajar de lo que debe ser.

function requestFile(myJSON) {
    var urlrequest = "mywebappexport/excel";
    var link = $('#exportbtn');
    $.ajax({
        url: link.attr('href'),
        type: "POST",
        data: JSON.stringify(myJSON),
        cache: true,
        contentType: "application/json; charset=utf-8",
        complete: function (data) {
        var ifr = ($('<iframe />').attr('src',     link.attr('href')).hide().appendTo(link))
        setTimeout(function () {ifr.remove();}, 5000);
    }
    })

};

Código actualizado: trabajar en los navegadores modernos, pero falla en IE8 – con el error
Unexpected call to method or property access. En la versión de jQuery 1.9.1.js.
this.appendChild( elem );

  • Usted tiene que usar iframe para este
  • La mejor solución es que el var de la solicitud url = «mywebappexport/excel» devolver la Url de Descarga y, a continuación, comenzar la descarga del archivo.
InformationsquelleAutor Hagbard | 2014-05-06

2 Comentarios

  1. 1

    Probar este http://jsfiddle.net/abLeR/

    Descarga un archivo tar el uso de iFrame oculto y ajax. El mismo puede ser utilizado para el archivo xls.

    HTML

    <a class="download" href="http://ftp.neu.edu.cn/mirrors/eclipse/technology/epp/downloads/release/kepler/SR1/eclipse-java-kepler-SR1-linux-gtk.tar.gz">Download</a>
    <span style="display:none;" class="loading">Loading...</span>

    Javascript

    $(".download").click(function (e) {
    
        e.preventDefault();
        var link = $(this);
        $('.loading').show();
    
        $.ajax({
            type: 'HEAD',
            url: link.attr('href'),
            complete: function () {
    
                $('.loading').hide();
                var ifr = $('<iframe />').attr('src', link.attr('href')).hide().appendTo(link)
                setTimeout(function () {ifr.remove();}, 5000);
            }
    
        });
    
    });
    • Hola, en este ejemplo se trabaja para el archivo de arriba, sin embargo tengo que presentar algunos datos al servidor, en primer lugar, para «generar» el archivo correcto. He intentado todo lo anterior con el agregado de datos: JSON.stringify(myJSON)’, Pero no hubo suerte. Alguna idea de cómo podría hacer esto?
    • Puede usted enviar a aquellos que como los parámetros GET?
    • En realidad se puede utilizar los mismos parámetros (tipo:post data:JSON) que se han dado en la pregunta. La única cosa es que después de generar el XLS, usted necesita para guardar en algún lugar en el servidor (es decir, con un nombre al azar) y, a continuación, el ajax debe devolver este valor de la dirección URL. A continuación, la función completa se obtiene la URL que puede ser utilizado para establecer la ruta de acceso para el iFrame
    • Gracias, tengo el código de trabajo para mis necesidades en los navegadores modernos, pero recibiendo un error en IE8 con mi código, alguna idea de por qué? He actualizado el código de arriba.
    • Puede ver si este demo es también el desencadenamiento mismo error en su IE? jsbin.com/vagajihi/1/edit
    • En mi IE 8.0.7600 que se ejecutan en vmware/mac, no tirar ningún error
    • Que el nuevo código no desencadenar un error no, debe ser algo en mi final, lo que está causando el problema. Se está trabajando en Chrome y FF, por lo que es suficiente por el momento, creo. Gracias!

  2. 2

    Usted puede utilizar AJAX para descargar archivos desde el servidor. El navegador va a negar Javascript de acceder el usuario del sistema de ficheros.

    Que usted debe buscar en el suministro de un «descargar servlet» en el lado del servidor, que puede establecer las cabeceras correspondientes para asegurar que el navegador descarga el archivo o le pide al usuario guardar una secuencia que se recibe desde el Servidor.

    Como se señaló aquí, usted podría también ciertos plugins que puede proporcionar una AJAX como la experiencia.
    Internamente también podría ser el uso de iFrames para simular AJAX-como comportamiento.

    • Gracias por la respuesta, el servidor está configurado para hacer que la medida de como soy consciente de que, estoy usando el cartero para depurar y me sale el archivo de excel generado como texto en el que hay, es solo disparo a través del AJAX, que creo que estoy teniendo problemas con el. He tratado de agregar tipo: application/vnd.ms-excel», pero no hay ayuda
    • AJAX no funcionará. Usted debe buscar alternativas. Cartero (por lo que he leído en dos minutos) que parece una extensión en Chrome para ayudar a probar los servicios RESTful. Que no es lo mismo que usar Javascript para descargar un archivo a través de AJAX.
    • Oh, sí Cartero sólo ayuda a ver la solicitud y la respuesta, pero sé que el servidor está generando el archivo, ya no tengo un error de hecho puedo conseguir el Éxito impreso en la consola, es sólo que no se iniciará la descarga de lo que pensé que sería automático manejado por el navegador, pero voy a echar un vistazo a los iframes para lograr lo creo
    • El servidor siempre va a funcionar. No hay ningún problema con el servidor. No se distingue entre una petición AJAX y una pregunta normal. Sin embargo, el navegador va a paso para asegurarse de que javascript no tiene acceso al sistema de ficheros.
    • Ah bueno, entonces, supongo que me veo obligado a usar algo como iframes. Me parece poco elegante. Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here