Ответ 1
Попробуйте ниже метод, надеюсь, что он будет работать
- откройте
ajaxexcel.php
в новом окне черезwindow.open
- он начнет загружаться, а затем закроет его.
- Как только он закрывается, перенаправляйте страницу.
У меня есть простая контактная форма для скачивания файла excel. Основная проблема возникает, когда ajax load. Я хочу загрузить файл excel, а затем перенаправить пользователя на следующую страницу. Ниже мой код с фиктивными данными.
Код 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" ?>';
}
});
И мой код ajaxexcel.php
:
<?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;
?>
Я хочу просто загрузить файл excel, а затем перенаправить пользователя в определенное место.
Также вы можете помочь мне с кодом codeigniter, если вы сделали это правильно.
Попробуйте ниже метод, надеюсь, что он будет работать
ajaxexcel.php
в новом окне через window.open
Я думаю, что скачать очень сложно. Пожалуйста, используйте PHP Excel для создания файла и загрузки.
Вы не можете загрузить файл с помощью запроса Ajax. Любые способы перенаправления в определенное место, которые позволят вам загрузить файл. Возможно, вы попытались с этим, но попробуйте загрузить файл на отдельной вкладке и перенаправите страницу на определенную страницу.
<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>
Также из вашего файла PHP (excel.php) удалите эту строку. В противном случае он загрузит ваш файл в формате JPG или PNG
header('Content-type: image/jpeg,image/gif,image/png');
Используя 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');
}
});
}
});
И на стороне php добавьте строку ниже в заголовках:
header("Set-Cookie: fileDownload=true; path=/");
вы можете использовать jquery.fileDownload.js
для этого.
вы можете найти здесь пример., http://www.codeasearch.com/working-with-jquery-filedownload-js-plugin.html
Собственно, для этой ситуации я рекомендую открыть папку с пустым параметром и перенаправить. Для этого вам нужно создать структуру формы и отправить ее в файл action.php
Пример:
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);
Используя https://github.com/johnculviner/jquery.fileDownload
Также из вашего файла PHP (excel.php) удалите эту строку. В противном случае он загрузит ваш файл в формате JPG или PNG
header ('Content-type: image/jpeg, image/gif, image/png');
Вы можете достичь этого, создав виртуальную форму и разместив ее.
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);
}
Вызовите метод выше, где он вам нужен, я предполагаю, что вы вызываете его в событии click
$('button').on('click', function(e){
autoGenerateAndSubmitForm("POST","/site/ajaxexcel.php",{'value':'send'});
location.href = '<?php echo base_url()."/site/welcome.php" ?>';
});
Снимите строку ниже со своего кода на стороне сервера.
header('Content-type: image/jpeg,image/gif,image/png');
В Ajax.... Просто вы можете создать файл excel на сервере... ajax response будет путь к файлу excel... При успехе ajax откройте файл excel на новой вкладке (он автоматически загружает excel) и в то же время открыть новую вкладку с новым местоположением.
пример кода внутри успеха ajax, приведенный ниже
window.open("path to excel..");
window.open("new location");
также может использовать (при необходимости)
window.location.replace("new location");
Метод 1: с jQuery AJAX
Замените ваш ajax на следующий код.
<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
откроет файл ajaxexcel.php в отдельном окне, а location.href
будет перенаправлен на указанный файл welcome.php. Это лучший способ для этого.
Метод 2: с плагином jQuery filedownload
Просто включите jqueryfiledownload script и выполните следующие действия:
<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>
Теперь, когда вы нажимаете на якорь, ваш файл загружается, и вы можете записать свой код успеха/отказа в done()/fail()
соответственно.
Просто используйте простой javascript
window.location.replace(###file url###);
1) Ajax не является решением.
2) window.open()
всплывающее окно будет заблокировано в большинстве браузеров даже из того же домена (по крайней мере, это происходило в chrome и FF некоторое время назад, когда я пытался реализовать что-то подобное)
Что-то вроде этого выполнит задание: (он не проверяет такие вещи, как возвращенный код, поэтому 404
или не файл выводит перенаправление без загрузки)
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>