web-dev-qa-db-fra.com

Utilisez jQuery pour envoyer des données Excel en utilisant AJAX

J'ai la fonction suivante qui extrait des données d'une base de données. L'appel ajax fonctionne correctement. Comment envoyer les données délimitées par des tabulations dans ma fonction de réussite à l'utilisateur? La définition du type de contect sur "application/vnd.ms-Excel" n'a pas fonctionné. L'alerte de réussite affiche les données correctement formatées.

     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);
       }});
     }

Je ne veux pas afficher les données dans le navigateur - je veux les envoyer à Excel.

EDIT: J'ai trouvé un moyen de faire ce que je voulais. Au lieu de rediriger les utilisateurs vers une nouvelle page qui les inciterait à enregistrer/ouvrir un fichier Excel, j'ai ouvert la page dans une iframe cachée. De cette façon, les utilisateurs cliquent sur un bouton et ils sont invités à enregistrer/ouvrir un fichier Excel. Pas de redirection de page. Est-ce Ajax? Non, mais cela résout le vrai problème que j'avais.

Voici la fonction que j'appelle sur le bouton:

     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;;
     }
33
Jim

AJAX est ... le mauvais choix. Redirigez l'utilisateur vers une ressource de serveur qui enverra les données avec le type MIME approprié, et laissez le navigateur comprendre quoi en faire.

14
Shog9

en HTML j'ai un formulaire avec des éléments d'entrées série et un bouton qui appelle une fonction JavaScript onclick="exportExcel();


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

et enfin un fichier pivot qui répond à quelque chose

Code 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 est un objet qui gère le html, et $ bd est un objet qui renvoie les données de la base de données envoyer votre propre table html ou tout ce que vous voulez.

5
fernando

Puisqu'il utilise JavaScript, AJAX est lié par les limitations conçues par JavaScript, qui incluent l'interaction avec d'autres processus sur la machine du client. Dans ce cas, c'est une bonne chose; vous ne voudriez pas qu'un site pouvoir charger automatiquement un document Excel contenant une macro malveillante.

Si vous souhaitez afficher les données dans le navigateur, vous pouvez utiliser AJAX; sinon, vous voudrez simplement donner un lien vers un document Excel et laisser les capacités régulières de gestion des téléchargements du navigateur déterminer ce qu'il faut faire.

2
Randy

Il est possible que vous ne souhaitiez pas le faire avec javascript.

Ce que je pense que vous voulez faire, c'est créer une page de réponse avec le type de mine application/csv puis rediriger l'utilisateur vers cette page. Je ferais probablement un window.open () car l'utilisateur ne perd pas la page sur laquelle il se trouve actuellement.

0
Sugendran