Firefox 확장 기능을 구축 할 때 사용자가 "확인"버튼을 눌렀을 때 Javascript 기능을 호출하는 대화 상자가 있습니다. 그 기능은 다음과 같습니다 : 나는 함수의 끝에서 경고 주석을 제거하면자바 스크립트 XMLHttpRequest Puzzler : 비동기 대 동기
var acceptSubscribeHttpReq = null;
function acceptSubscribe(url) {
acceptSubscribeHttpReq = new XMLHttpRequest();
acceptSubscribeHttpReq.onload = httpLoadedSubscribe;
acceptSubscribeHttpReq.onerror = httpErrorSubscribe;
try {
acceptSubscribeHttpReq.open("GET", url, true);
acceptSubscribeHttpReq.send(null);
} catch(e) {
acceptSubscribeHttpReq.abort();
return false;
}
// alert("request.status = "+acceptSubscribeHttpReq.status);
return true;
}
흥미롭게도,이 내가 (false로 개방의 세 번째 인수를 설정하여) 동기식 전송을 사용하는 경우 잘 작동, 또는. 그러나 경고의 주석을 제거하지 않고 비동기를 사용하면 자동으로 실패합니다. 예상대로이 함수에서 복귀하지만 onload 핸들러는 절대 실행되지 않습니다.
이것은 함수가 종료 될 때 XMLHttpRequest 객체가 파괴되고 있음을 나타냅니다. 그 맞습니까? 이것이 버튼에서 호출되기 때문에 이런 일이 발생 했습니까? 그렇다면 가능한 해결책은 무엇입니까? 그게 아니라면 왜 이런 일이 일어날 지 생각해?
다음은 대화의 XUL입니다 :
<dialog id="winMain" title="&settingWindow.title;" style="min-width:400px;"
onload="initSubscribe();" ondialogaccept="return acceptSubscribe();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
모든 모든 도움 감사합니다! 요청 (온로드 /의 OnError)를 완료 한 후 요청의
'httpErrorSubscribe' 핸들러를 호출하지 않고 어떻게 실패합니까? – Bergi
@Bergi - 나 자신을 알고 싶다! 하지만 예, 비동기 전송을 수행하면 onload 또는 onerror 처리기가 실행되지 않습니다. –