> 웹 프론트엔드 > JS 튜토리얼 > AJAX가 파일 다운로드에 작동하지 않는 이유는 무엇이며 최선의 대안은 무엇입니까?

AJAX가 파일 다운로드에 작동하지 않는 이유는 무엇이며 최선의 대안은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-09 17:50:12
원래의
593명이 탐색했습니다.

Why Doesn't AJAX Work for File Downloads, and What's the Best Alternative?

AJAX 요청으로 파일 다운로드: 종합 가이드

문제: "ajax 다운로드 요청" 시작 시도 버튼을 클릭해도 원하는 결과가 나오지 않습니다. 아래에는 JavaScript 및 PHP 데모가 제공됩니다.

JavaScript:

var xhr = new XMLHttpRequest();
xhr.open("GET", "download.php");
xhr.send();
로그인 후 복사

PHP(download.php):

<?
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= file.txt");
header("Content-Transfer-Encoding: binary");    
readfile("file.txt");
?>
로그인 후 복사

위 코드가 예상대로 작동하지 않습니다. 이 문제를 해결하는 데 필요한 단계에 대한 통찰력을 제공할 수 있습니까?

해결책:

AJAX 요청을 통해 파일 다운로드를 시작하는 것은 불가능합니다. 이 작업을 위해서는 파일에 직접 액세스해야 합니다.

업데이트된 솔루션(2015년 4월 27일):

'다운로드' 속성 사용:

  • HTML5에는 '다운로드' 속성이 도입되었습니다. Firefox와 Chrome에서 지원되며 곧 IE11에 포함될 예정입니다. 동일한 출처에서 직접 파일을 다운로드할 수 있습니다.

JavaScript:

// Check if 'download' is supported
if ('download' in HTMLAnchorElement.prototype) {
    // Create an anchor element
    var anchor = document.createElement('a');

    // Set 'download' attribute and file URL
    anchor.download = 'file.txt';
    anchor.href = 'download.php';

    // Trigger file download
    anchor.click();
} else {
    // Fallback to previous method
    window.location = 'download.php';
}
로그인 후 복사

원래 솔루션:

사용 'window.location':

  • AJAX 요청과 달리 'window.location'은 파일을 직접 탐색하여 다운로드를 시작합니다.

JavaScript :

$.ajax({
    url: 'download.php',
    type: 'POST',
    success: function() {
        window.location = 'download.php';
    }
});
로그인 후 복사

단순화를 위해 AJAX를 사용하지 않는 것이 좋습니다. 모두 요청하고 'window.location'을 사용하면 됩니다.

위 내용은 AJAX가 파일 다운로드에 작동하지 않는 이유는 무엇이며 최선의 대안은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿