2008-09-29 41 views
31

Tengo la siguiente función que está extrayendo datos de una base de datos. La llamada ajax está funcionando correctamente. ¿Cómo puedo enviar los datos delimitados por tabuladores en mi función de éxito al usuario? Establecer el tipo de contexto a "application/vnd.ms-excel" no funcionó. La alerta de éxito muestra los datos formateados correctamente.Usar jQuery para enviar datos de Excel usando AJAX

 function SendToExcel() { 
     $.ajax({ 
      type: "GET", 
      url: "/Search.aspx", 
      contentType: "application/vnd.ms-excel", 
      dataType: "text", 
      data: "{id: '" + "asdf" + "'}", 
      success: function(data) { 
       alert(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(jqXHR.responseText); 
     }}); 
    } 

No deseo mostrar los datos en el navegador - Deseo enviarlos a Excel.

EDIT: Encontré una manera de hacer lo que quería. En lugar de redirigir a los usuarios a una nueva página que les pedirá que guarden/abran un archivo de Excel, abrí la página dentro de un iframe oculto. De esta forma, los usuarios hacen clic en un botón y se les solicita que guarden/abran un archivo de Excel. Sin redirección de página. ¿Es Ajax? No, pero soluciona el problema real que tuve.

Aquí es la función que estoy llamando en el botón clic:

 function SendToExcel() { 
     var dataString = 'type=excel' + 
      '&Number=' + $('#txtNumber').val() + 
      '&Reference=' + $('#txtReference').val() 

     $("#sltCTPick option").each(function (i) { 
      dataString = dataString + '&Columns=' + this.value; 
     }); 

     top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;; 
    } 
+2

¿Alguna razón por la cual esta es una pregunta incorrecta? ¿Por qué se votó esto abajo? – Jim

+0

se votó negativamente porque lo más probable es que todos crean que la solicitud de AJAX es un mal enfoque, pero con un iframe oculto es posible obtener el diálogo de descarga. Aunque obtienes resultados diferentes con cada navegador. Recuerdo que IE era el que tenía los problemas. pero el enfoque del iframe oculto funciona - puedo confirmarlo. – IEnumerator

Respuesta

13

AJAX es ... la elección equivocada. Redirija al usuario a un recurso de servidor que enviará los datos con el tipo MIME adecuado y deje que el navegador descubra qué hacer con él.

+0

@ Shog9 Por favor explique sobre _la elección incorrecta_ con razones (técnicas). – LosManos

2

Dado que usa JavaScript, AJAX está sujeto a las limitaciones diseñadas de JavaScript, que incluyen la interacción con otros procesos en la máquina del cliente. En este caso, es algo bueno; no le gustaría que un sitio cargue automáticamente un documento de Excel con una macro maliciosa.

Si desea visualizar los datos en el navegador, puede usar AJAX; de lo contrario, querrá simplemente dar un enlace a un documento de Excel y dejar que las capacidades normales de manejo de descargas del navegador descubran qué hacer.

0

Es posible que no desee hacer esto con javascript.

Lo que creo que quieres hacer es crear una página de respuesta con el tipo de mina application/csv y luego redirigir al usuario a esa página. Probablemente haga un window.open() ya que el usuario no pierde la página en la que se encuentra actualmente.

5

en HTML Tengo un formulario con elementos de entradas en serie y un botón que llama a una función JavaScript onclick="exportExcel();


a continuación en el archivo JavaScript:

function exportExcel(){ 
    var inputs = $("#myForm").serialize(); 
    var url = '/ajaxresponse.php?select=exportExcel&'+inputs; 
    location.href = url; 
} 

y, finalmente, un archivo de pivote que respuesta a algo

código PHP:

case 'exportExcel':{ 
        ob_end_clean(); 
        header("Content-type: application/vnd.ms-excel"); 
        header("Content-Disposition: attachment; 
        filename=exportFile.xls"); 
        echo $html->List($bd->ResultSet($_GET)); 
       } 

$ html es un objeto que maneja html, y $ bd es un objeto que devuelve datos de la base de datos , envíe su propia tabla html o lo que quiera.

Cuestiones relacionadas