내 웹 페이지에는 파일을 다운로드 할 수있는 버튼이 있습니다. 다운로드 할 파일이 없다면 같은 페이지에 머무르는 동안 메시지를 표시하고 싶습니다.첨부 파일 다루기 jquery.ajax
function downloadFile(id) {
window.location = '/myapp.com/download_file/' + id;
}
내 서버가 응답 본문에 파일 내용을 기록하고 '첨부 파일'에 세트 '내용 - 처리'헤더 : 다운로드 할 수있는 파일 (ID가 파일 ID입니다)이있을 때 다음 자바 스크립트 코드가 작동합니다.
이제 파일이 없으면 다운로드 할 파일이 없다는 내용의 텍스트를 반환하고 싶습니다. 그래서 아래와 같은 일을하고 싶습니다 :
function downloadFile(id) {
$.ajax({
url: '/myapp.com/download_file/' + id,
success: function() {
//if (attachemnt) {
// download file: just pass response to the browser?
//} else {
// show error text
//}
},
error: function() {
//show error message
}
});
}
그래서, 내 질문은 :
- 어떻게 위의 기능을 구현할 수 있습니다?
- 특히, 응답에 첨부 파일이있는 경우 브라우저가 파일 다운로드를 처리 할 수 있도록 브라우저에 응답을 전달할 수 있습니까?
UPDATE : 내가 처리 할 수있는 지금 '없는 파일'사건 :
$.ajax({
url: '{{ path('download_prev_other_data', {'other_data_id':form.vars.value.getOtherDataId() }) }}',
success: function (data, textStatus, jqXHR) {
var header = jqXHR.getResponseHeader('Content-Disposition');
if (header && header.indexOf('attachment') === 0) {
//pass the original response to the browser
} else {
alert(data); //data is just text in my case explaining there was no file
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
그래서, 내 두번째 질문은, "브라우저에 원래의 응답을 전달하는 방법"아직 대답하지 않습니다. 이
예, 나는 이것을 알고있다. 방금 추가 라이브러리없이 갈 수 있다고 생각했습니다. – synergetic
@synergetic 그런 다음 게시물에서 Idon't이 플러그인을 사용하고 싶다고 언급해야합니다. –
@synergetic 데스크톱과 모바일 브라우저 (예 : iOS의 일부 버그)를 처리해야하기 때문에 이러한 기능을 처음부터 작성하는 것은 정말로 어렵습니다. 위의 플러그인의 전체 소스 코드를 보려면 https://github.com/johnculviner/jquery.fileDownload/blob/master/src/Scripts/jquery.fileDownload.js를 참조하십시오. 그것은 iframe을 숨기고 그것을 사용하여 comunicates 사용하고 있습니다 –