문제

강제로 다운로드하는 스크립트가 있고 Javascript를 통해 이를 호출합니다.그러나 대화 상자가 나타나지 않습니다. 다음은 download.php 스크립트입니다.

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

다음은 Javascript입니다(JQuery 사용).

///force download
           $.ajax({
           type: "GET",
           url: "download.php",
           data: 'file=' + msg + '&properFilename=' + properFileName,
           success: function(msg){

              window.location.href = msg;

         });//ajax

그러면 다운 대화 상자가 표시되지 않고 브라우저가 다른 페이지로 리디렉션됩니다.

JS 변수 msg에 올바른 헤더가 있는 파일이 포함되어 있다는 것을 알고 있지만 다운로드 대화 상자를 표시하려면 어떻게 해야 할지 모르겠습니다.

모두 감사합니다

추신.이 스레드 JS 또는 PHP를 어디에 두어야 할지 몰랐습니다.

편집하다:

나는 올바른 접근 방식을 가지고 있다고 확신합니다 :) - 사용자가 내 사이트에 와서 양식을 작성하고 제출을 누릅니다.몇 초 후에 다운로드할 수 있는 대화 상자에 해당 파일이 표시되어야 합니다.이것을하기 위해:

파일을 가져와 다운로드하기 위해 AJAX 호출을 합니다.헤더를 보내기 위해 PHP 스크립트를 사용합니다.이제 나에게 필요한 것은 다운로드 대화 상자를 표시하는 방법뿐입니다!!

도움이 되었습니까?

해결책

Ajax 호출이라는 사실에 대한 대화 상자가 표시되지 않습니다.

window.location.href = msg;

그것이 당신을 리디렉션하는 것입니다.여기서는 ajax 호출이 필요하지 않다고 생각합니다. href 링크를 사용하여 정상적으로 페이지를 호출하면 됩니다.

편집하다

양식을 제출하고 다운로드 대화 상자를 표시하려면 다음을 수행하십시오.

<script>
function showDialogBox(form) {
    form.submit();
    window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">

</form>

다른 팁

전체 다운로드 .php 스크립트 인 경우 variable $ 파일 ($ filename 만)에서 찾을 수 없지만 JS에서는 $ 파일 변수를 보냅니다. 둘째 : JS에서 뭔가 잘못 - 변수 이름을 사용하는 이유 msg 안에 data: 그리고에서 success:?

Sktrdie가 지적한 것처럼 이것이 예상 될 수 있다는 것입니다. 지금 당장 테스트 할 수는 없지만 생각한다면 사용자는 그 자체로 사용자가하고있는 Ajax에 대한 알림을받지 못합니다. 갑자기 그러한 메시지가 자극적 일 것입니다.

해당 페이지에 (숨겨진?) iframe을 만들고 해당 대화 상자를 얻을 수있는 URL로 리디렉션하면 해당 대화 상자를 얻을 수 있다고 생각합니다. ymmv, hth.

PHP를 잠시 코딩하지 않았으므로 코드에 문제가 있는지 확실하지 않습니다. 그러나 나는 문제가 당신의 접근에 있다고 생각합니다. Ajax 호출에 대한 응답이 아닌 프레임에 다운로드를로드해야합니다. 따라서 기본적으로 문서에 보이지 않는 iframe을 형성하고 URL에 추가 된 Get 매개 변수를 다운로드하는 것을 지적해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top