Подтвердить что ты не робот

Загрузите файл и перенаправьте его на другую страницу через ajax

У меня есть простая контактная форма для скачивания файла 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, если вы сделали это правильно.

4b9b3361

Ответ 1

Попробуйте ниже метод, надеюсь, что он будет работать

  • откройте ajaxexcel.php в новом окне через window.open
  • он начнет загружаться, а затем закроет его.
  • Как только он закрывается, перенаправляйте страницу.

Ответ 2

Я думаю, что скачать очень сложно. Пожалуйста, используйте PHP Excel для создания файла и загрузки.

Ответ 3

Вы не можете загрузить файл с помощью запроса 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');

Ответ 4

Используя 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=/");

Ответ 6

Собственно, для этой ситуации я рекомендую открыть папку с пустым параметром и перенаправить. Для этого вам нужно создать структуру формы и отправить ее в файл 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);

Ответ 7

Используя https://github.com/johnculviner/jquery.fileDownload

Также из вашего файла PHP (excel.php) удалите эту строку. В противном случае он загрузит ваш файл в формате JPG или PNG

header ('Content-type: image/jpeg, image/gif, image/png');

Ответ 8

Вы можете достичь этого, создав виртуальную форму и разместив ее.

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

Ответ 9

В Ajax.... Просто вы можете создать файл excel на сервере... ajax response будет путь к файлу excel... При успехе ajax откройте файл excel на новой вкладке (он автоматически загружает excel) и в то же время открыть новую вкладку с новым местоположением.

пример кода внутри успеха ajax, приведенный ниже

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

также может использовать (при необходимости)

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

Откройте несколько ссылок в Chrome сразу как новые вкладки

Ответ 10

Метод 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() соответственно.

Ответ 11

Просто используйте простой javascript

window.location.replace(###file url###);

Ответ 12

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>