Ajax 요청 과정 에서 FireFox(불 여우)브 라 우 저 에서 파일 을 다운로드 하 는 호환성 문제
demo 코드 는 다음 과 같 습 니 다.
<a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe" >click</a>
<script src="jQuery.js"></script>
<script>
document.getElementById("a").onclick = function(e) {
$.post("data.php");
};
</script>
a 탭 이 onclick 이벤트 와 href 속성 을 동시에 가지 고 있다 면 onclick 이벤트 의 리 셋 은 기본 이벤트(즉 점프)전에 실 행 됩 니 다.이것 은 바로 onclick 이벤트 에서 e.preventDefault()와 유사 한 코드 로 기본 이벤트(즉 점프)를 제거 할 수 있 는 이유 입 니 다.따라서 상기 코드 는 a 탭 을 클릭 하면 먼저 onclick 이벤트 의 리 셋 을 실행 합 니 다.즉,ajax 요청 을 보 냅 니 다.이론 적 으로 코드 에 있 는 ajax 는 비동기 적 이기 때문에 요청 하면 서 다운로드 파일 을 엽 니 다.chrome,UC,opera,2345 브 라 우 저 에서 예상 한 것 과 일치 합 니 다.fireforx 에서 클릭 하면 다운로드 파일 이 튀 어 나 올 수 있 지만 ajax 부분 이 잘못 되 었 습 니 다.IE 에 서 는 테스트 되 지 않 았 습 니 다.
처음에 잘못된 생각 은 도 메 인 을 넘 어 오 류 를 초래 한 다 는 것 이다.다운로드 링크 를 클릭 하면 ajax 요청 은 페이지 가 href 가 가리 키 는 주소 로 넘 어 갈 것 이 라 고 생각 하여 브 라 우 저 는 이 ajax 가 도 메 인 을 넘 어 갈 것 이 라 고 생각 합 니 다.이 잘못된 생각 은 곧 뒤 집 혔 습 니 다.하 나 는 ajax 요청 을 먼저 하기 때문에 요청 순간 도 메 인 을 뛰 어 넘 지 않 았 습 니 다.둘째,크로스 오 류 를 보고 하지 않 았 습 니 다.셋째,다음 코드 는 이 오 류 를 더욱 증명 했다.
<a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe" >click</a>
<script src="jQuery.js"></script>
<script>
$.post("data.php"); // data.php sleep(100)
</script>
이 페이지 를 열 면 ajax 요청 이 있 습 니 다.다운로드 단 추 를 누 르 면 요청 이 중 단 됩 니 다.a 탭 의 href 속성 값 이 파일 주소 가 아니 라 임의의 url 로 바 뀌 면 a 탭 을 누 르 면 페이지 는 이 탭 이 가리 키 는 주소 로 바로 이동 합 니 다.페이지 가 존재 하지 않 습 니 다.ajax 도 자 연 스 럽 게 중단 되 었 습 니 다.a 태그 가 파일 주 소 를 가리 키 면 ff 에서 도 똑 같이 해석 되 지 않 습 니까?답 은 긍정 적 입 니 다.저 는 stackoverflow 에서 답 을 찾 았 습 니 다.
When clicking the download link you are leaving the page, even it does not look so. If there would no file transfer, you would see the requested page.. try to set a target="_blank" or use an iframe as target for the link.
질문 을 통 해 알 수 있 듯 이 2010 년 에는 chrome 과 ff 가 비슷 한 질문 을 했 고 chrome 이나 webkit 커 널 브 라 우 저 는 이후 버 전 교체 에서 이 문 제 를 복 구 했 으 며 ff 는 문 제 를 현재 로 남 겨 두 었 다.
문제 의 근원 을 알 게 되면 해결 방안 도 곧 나 올 것 이다.
방법 1:
가장 쉬 운 방법 은 a 라벨 에 target=""blank",사실 보통 홈 페이지 에서 이렇게 하 는 것 도 긍정 적 인 방법 입 니 다.
방법 2:
a 탭 의 기본 행동 이 ajax 요청 을 중단 시 킬 수 있 으 니'기본 행동'을 요청 하기 전에 두 시 겠 습 니까?
<a id="a" href="javascript:;" >click</a>
<script src="jQuery.js"></script>
<script>
document.getElementById("a").onclick = function(e) {
location.href = "http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe";
$.post("data.php");
};
</script>
방법 3:타 이 머 를 설정 하여 요청 을 지연 시 킵 니 다.그러나 a 태그 의 기본 점프 는 자바 script 스 레 드 가 제어 할 수 있 는 범위 에 속 하지 않 기 때문에 이 지연 한도 값 의 설정 이 매우 중요 합 니 다.제 로 컬 테스트 결 과 는 2ms(또한 전혀 생각 하지 못 했 습 니 다)입 니 다.보통 100 ms 정도 로 설정 하면 ok 입 니 다.이 방법 은 우아 하지 않 아서 사용 해 서 는 안 된다.
<a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe" >click</a>
<script src="jQuery.js"></script>
<script>
document.getElementById("a").onclick = function(e) {
setTimeout(function() {
$.post("data.php");
}, 100);
};
</script>
이상 의 내용 은 Ajax 요청 과정 에서 다운로드 한 파일 이 FireFox(불 여우)브 라 우 저 에서 호 환 되 는 문 제 를 소개 하 였 으 며,앞으로 의 업무 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Javascript Ajax에 대한 간단한 연습저는 약 4년 동안 프로그래밍 개인 튜터로 일한 경험이 있습니다. 약 5년 전에 " "이라는 제목의 페르시아어로 내 웹사이트에 블로그 게시물을 올렸고 사람들이 저에게 전화하기 시작했습니다. 나는 항상 사람들을 가르치...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.