Télécharger un fichier et le rediriger vers une autre page via ajax

j'ai un formulaire de contact simple pour télécharger le fichier excel . Problème principal arrive, quand charge ajax .Je veux télécharger le fichier excel puis de rediriger l'utilisateur vers une page suivante.. Voici mon code avec des données factices..

code Ajax..

$.ajax({
    type: "POST",
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'},
    cache: false,
    success: function(html){
        location.href = '<?php echo base_url()."/site/welcome.php" ?>';                 
    }
});

et mon code ajaxexcel.php est:

<?php 
$content= '<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
    <!--[if gte mso 9]>
    <xml>
        <x:ExcelWorkbook>
            <x:ExcelWorksheets>
                <x:ExcelWorksheet>
                    <x:Name>Sheet 1</x:Name>
                    <x:WorksheetOptions>
                        <x:Print>
                            <x:ValidPrinterInfo/>
                        </x:Print>
                    </x:WorksheetOptions>
                </x:ExcelWorksheet>
            </x:ExcelWorksheets>
        </x:ExcelWorkbook>
    </xml>
    <![endif]-->
</head>

<body><table class="table table-condensed table-striped table-hover table-bordered pull-left" id="myTable"><thead><tr><th>Rakesh</th><th>kumar</th></tr></thead><tbody><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr></tbody></table></body></html>';
header('Content-type: application/excel');
header('Content-type: image/jpeg,image/gif,image/png');
header("Content-Disposition: attachment; filename=download.xls");
header("Pragma: ");
header("Cache-Control: ");
echo $content;
?>

je veux juste télécharger le fichier excel et puis rediriger l'utilisateur à un endroit spécifique.

vous pouvez aussi m'aider avec votre code codeigniter si vous l'avez fait correctement..

27
demandé sur Kumar Rakesh 2016-08-25 11:04:56

12 réponses

d'Essayer la méthode ci-dessous, espère que cela va fonctionner

  1. ouvrir ajaxexcel.php dans une nouvelle fenêtre via window.open
  2. il va commencer à télécharger, puis fermer.
  3. dès qu'il ferme, page de redirection.
5
répondu shyammakwana.me 2016-08-25 09:35:29

je pense qu'il est très difficile de les télécharger. Veuillez utiliser PHP Excel pour créer le fichier et le télécharger.

4
répondu Vijju Pundir 2016-08-25 09:27:35

vous ne pouvez pas télécharger un fichier en utilisant la requête Ajax. Tout comment vous devez rediriger vers un emplacement particulier qui vous permettra de télécharger le fichier. Peut-être que vous avez essayé avec cela, mais essayez de télécharger le fichier dans l'onglet séparé et redirigez votre page vers la page particulière.

<input id="btnGetResponse" type="button" value="Redirect" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
    $("#btnGetResponse").click(function () {
        window.open('/test/excel.php');
        window.location = "http://stackoverflow.com/";
    });
});
</script>

aussi à partir de votre fichier PHP (excel.php) supprimer cette ligne. Sinon, il téléchargera votre fichier comme JPG ou PNG

header('Content-type: image/jpeg,image/gif,image/png');
4
répondu Milan Malani 2016-08-28 04:24:08

en utilisant https://github.com/johnculviner/jquery.fileDownload js:

$.ajax({
    type: "POST",
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'},
    cache: false,
    success: function(html)
        {
            $.fileDownload("ajaxheader.php",
            {
                successCallback: function (url) {
                    location.href = '<?php echo base_url()."/site/welcome.php" ?>';    
                },
                failCallback: function (responseHtml, url) {
                    alert('error');
                }
            });       
        }
});

et à côté de php ajouter au-dessous de la ligne dans les en-têtes:

header("Set-Cookie: fileDownload=true; path=/");
4
répondu Ish 2016-08-31 22:56:38

vous pouvez utiliser jquery.fileDownload.js pour cela. vous pouvez trouver un exemple ici . . . http://www.codeasearch.com/working-with-jquery-filedownload-js-plugin.html

2
répondu Ravikiran kalal 2016-08-25 08:59:33

en fait pour cette situation je recommande l'emplacement du fichier ouvert avec l'option blank et la redirection. Pour cela, vous devez créer une structure de formulaire et le soumettre à votre action.php

exemple:

var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "action.php");
form.setAttribute("target", "myView");
// or you can use _blank : form.setAttribute("target", "_blank");

var hiddenField = document.createElement("input"); 
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "message");
hiddenField.setAttribute("value", "val");
form.appendChild(hiddenField);
document.body.appendChild(form);
window.open('', 'myView');
form.submit();
alert("Redirect in 10 second!");
setTimeout(function(){
  location.href = "/home"
}, 10000);
2
répondu hurricane 2016-08-25 09:31:40

en utilisant https://github.com/johnculviner/jquery.fileDownload

aussi à partir de votre fichier PHP (excel.php) supprimer cette ligne. Sinon, il téléchargera votre fichier comme JPG ou PNG

en-tête ('Content-type: image / jpeg, image/gif, image / png');

2
répondu Vaibhav Walke 2016-08-30 06:28:59

vous pouvez y parvenir en créant une forme virtuelle et en la postant.

function autoGenerateAndSubmitForm(method, url, post_data) {
    var element = document.getElementById("virtual_form");
    if(element != null )
    {
        element.parentNode.removeChild(element);
    }
    var form = document.createElement("form");
    form.setAttribute("id", "virtual_form");
    form.setAttribute("style", "display:none;");
    form.setAttribute("target", "_blank"); // This line is very important in your case for redirect in other page and download your file.
    form.method = method;
    form.action = url;   
    for(i in post_data)
    {
         var element=document.createElement("input");
         element.value=post_data[i];
         element.name=i;
         form.appendChild(element); 
    }
    document.body.appendChild(form);
    form.submit();
    form.parentNode.removeChild(form);
}

appel méthode ci-dessus où vous en avez besoin, je suppose que vous avez l'appel en cas de clic

$('button').on('click', function(e){
     autoGenerateAndSubmitForm("POST","/site/ajaxexcel.php",{'value':'send'});
     location.href = '<?php echo base_url()."/site/welcome.php" ?>';     
});

supprimer la ligne ci-dessous de votre code côté serveur.

header('Content-type: image/jpeg,image/gif,image/png');
2
répondu Haresh Vidja 2016-08-30 10:26:09

En Ajax....Vous pouvez simplement créer un fichier excel sur le serveur ... la réponse ajax sera le chemin du fichier excel...Sur ajax succès ouvrez le fichier excel dans un nouvel onglet (il télécharge automatiquement excel) et en même temps ouvrir un nouvel onglet avec le nouvel emplacement.

exemple de code à l'intérieur d'ajax succès indiqué ci-dessous

  window.open("path to excel..");
    window.open("new location");

peut également utiliser (si nécessaire)

window.location.replace("new location");

ouvrir plusieurs liens dans Chrome à la fois comme nouveau les onglets

2
répondu safin chacko 2017-05-23 11:45:52

Méthode 1 : avec jQuery AJAX

remplacer votre ajax par le code suivant..

<script>
$.ajax({
    type: "POST",
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'},
    cache: false,
    success: function(html)
    {
        window.open("/site/ajaxexcel.php");
        location.href = '<?php echo base_url()."/site/welcome.php" ?>';                 
    }
});
</script>   

window.open ouvrira l'ajaxexcel.le fichier php dans la fenêtre séparée et location.href redirigera vers l'accueil donné.fichier php.C'est la meilleure méthode pour cela.

Méthode 2 : avec jQuery filedownload plugin

incluez juste jqueryfiledownload script et faire quelque chose comme ça:

<a class="download" href="/path/to/file">Download</a>
<script>
$(document).on("click", "a.download", function () {
            $.fileDownload($(this).prop('href'))
                .done(function () { alert('File download a success!'); //success code})
                .fail(function () { alert('File download failed!');//failure code });

            return false; //this is critical to stop the click event which will trigger a normal file download
        });
</script>

Maintenant, lorsque vous cliquez sur Ancre votre fichier est téléchargé et vous pouvez écrire votre code de réussite/échec dans les fonctions done()/fail() respectivement.

2
répondu Manjeet Barnala 2016-09-19 16:07:37

juste à utiliser avec javascript simple

window.location.replace(###file url###);
1
répondu Antonio Stipić 2016-09-01 18:45:15

1) Ajax n'est pas une solution.

2) window.open() popup sera bloqué dans la plupart des navigateurs, même à partir du même domaine (au moins cela se passait dans chrome et FF il y a quelque temps, quand j'ai essayé d'implémenter quelque chose de similaire)

quelque chose comme cela ferait le travail: (il ne vérifie pas les trucs comme le code retourné, donc 404 ou la sortie non-fichier causera une redirection sans téléchargement)

document.getElementById('zzz').onclick = function() {
  ifrm = document.createElement('iframe');
  ifrm.style.display = "none";

  ifrm.src = "https://github.com/SheetJS/test_files/blob/b07031a7bd5a8b86b9baac94267f20cf81c6d5eb/A4X_2013.xls?raw=true"; 
// some random xls file from github (it contains just a single "x" character in cell A-4)
  
  ifrm.onload = function() {
    window.location.href = "https://jquery.com";
  };
  
  document.body.appendChild(ifrm);
  return false;
}
<a href="#" id="zzz">
click me
</a>

P.S.: vous voudrez application/octet-stream Content-type en-tête pour certains types de fichiers (comme pdf) pour forcer le navigateur à télécharger le fichier au lieu d'utiliser des visionneuses intégrées.

1
répondu haldagan 2016-09-07 06:40:10