programing

파일을 다운로드한 후 Ajax를 통해 다른 페이지로 리디렉션

yellowcard 2023. 7. 24. 22:23
반응형

파일을 다운로드한 후 Ajax를 통해 다른 페이지로 리디렉션

엑셀 파일 다운로드를 위한 간단한 연락처 양식이 있습니다. 주요 문제는 아약스 로드 시 발생합니다.엑셀 파일을 다운로드한 후 사용자를 다음 페이지로 리디렉션하고 싶습니다.아래는 더미 데이터가 있는 제 코드입니다.

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;
?>

나는 엑셀 파일을 다운로드한 다음 사용자를 특정 위치로 리디렉션하고 싶습니다.

또한 당신이 제대로 했다면 당신의 코드 점화기 코드를 나에게 도와줄 수 있습니다.

아래 방법을 사용해 보십시오. 효과가 있기를 바랍니다.

  1. 열다.ajaxexcel.php을 통해 새 창에.window.open
  2. 다운로드를 시작한 다음 닫습니다.
  3. 닫히는 대로 페이지를 리디렉션합니다.

저는 다운로드하기가 매우 어렵다고 생각합니다.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

실제로 이러한 상황에서는 빈 옵션으로 파일 위치를 열고 리디렉션하는 것이 좋습니다.이를 위해 양식 구조를 생성하여 작업에 제출해야 합니다.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로 파일을 다운로드합니다.

헤더('내용 유형: 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);
}

필요한 곳에 위의 방법을 호출하십시오. 클릭 이벤트에서 호출하셨을 것입니다.

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

아약스에서...서버에 Excel 파일을 생성하기만 하면 됩니다. Ajax 응답이 Excel 파일의 경로가 됩니다.Ajax가 성공하면 새 탭에서 Excel 파일을 열고(자동으로 Excel을 다운로드함) 동시에 새 위치로 새 탭을 엽니다.

아래에 주어진 Ajax 성공 내부의 샘플 코드

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

또한 사용할 수 있습니다(필요한 경우).

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

Chrome에서 여러 링크를 동시에 새 탭으로 열기

방법 1: jQuery 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 agaxexcel.dll 파일이 열립니다.location.href지정된 환영으로 리디렉션됩니다.php 파일.이것이 가장 좋은 방법입니다.

방법 2: jQuery 파일 다운로드 플러그인 사용

jquery 파일 다운로드 스크립트를 포함하고 다음과 같은 작업을 수행합니다.

<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()각각의 기능.

간단한 자바스크립트와 함께 사용하기만 하면 됩니다.

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

Ajax는 해결책이 아닙니다.

2)window.open()팝업은 동일한 도메인에서도 대부분의 브라우저에서 차단됩니다(적어도 얼마 전에 내가 비슷한 것을 구현하려고 했을 때 크롬과 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>

추신: 당신은 원할 것입니다.application/octet-stream Content-type일부 파일 형식(예: PDF)의 헤더를 사용하여 브라우저가 기본 제공 뷰어를 사용하는 대신 파일을 다운로드하도록 강제합니다.

언급URL : https://stackoverflow.com/questions/39139828/download-a-file-and-redirect-it-to-another-page-via-ajax

반응형