33 votes

Utiliser jQuery pour envoyer des données Excel en AJAX

J'ai la fonction suivante qui extrait des données d'une base de données. L'appel ajax fonctionne correctement. Comment puis-je envoyer à l'utilisateur les données délimitées par des tabulations dans ma fonction de réussite ? La définition du type de contexte à "application/vnd.ms-excel" n'a pas fonctionné. L'alerte en cas de succès 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 inviterait à enregistrer/ouvrir un fichier Excel, j'ai ouvert la page à l'intérieur d'une iframe cachée. Ainsi, les utilisateurs cliquent sur un bouton et sont invités à enregistrer/ouvrir un fichier Excel. Aucune redirection de page. S'agit-il d'Ajax ? Non, mais cela résout le vrai problème que j'avais.

Voici la fonction que j'appelle lors du clic 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;;
     }

13voto

Shog9 Points 82052

AJAX est... le mauvais choix. Redirigez l'utilisateur vers une ressource du serveur qui enverra les données avec le type MIME approprié, et laissez le navigateur déterminer ce qu'il doit en faire.

5voto

fernando Points 1

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


puis dans le fichier JavaScript :

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. envoyez votre propre table html ou ce que vous voulez.

2voto

Randy Points 3196

Étant donné qu'il utilise JavaScript, AJAX est soumis aux limites conçues par JavaScript, ce qui inclut 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 puisse charger automatiquement un document Excel contenant une macro malveillante.

Si vous souhaitez afficher les données dans le navigateur, vous pouvez utiliser AJAX ; dans le cas contraire, vous devez simplement fournir un lien vers un document Excel et laisser les capacités habituelles de traitement des téléchargements du navigateur déterminer ce qu'il faut faire.

0voto

Sugendran Points 1434

Il est possible que vous ne souhaitiez pas faire cela 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() puisque l'utilisateur ne perd pas la page sur laquelle il se trouve.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X