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..
12 réponses
d'Essayer la méthode ci-dessous, espère que cela va fonctionner
- ouvrir
ajaxexcel.php
dans une nouvelle fenêtre viawindow.open
- il va commencer à télécharger, puis fermer.
- dès qu'il ferme, page de redirection.
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.
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');
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=/");
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
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);
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');
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');
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
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.
juste à utiliser avec javascript simple
window.location.replace(###file url###);
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.