AJAX를 통해 BLOB를 검색할 때 오류 메시지 처리
서버의 응답에 따라 블롭 또는 텍스트 문자열을 반환할 수 있는 AJAX 호출을 수행하려면 어떻게 해야 합니까?
AJAX를 사용하여 사용자가 제공한 비디오를 오디오 BLOB로 변환하고 있습니다.<audio>
tag). 변환 프로세스는 정상적으로 작동하지만 비디오에 문제가 있을 수 있습니다. 이 경우 서버는 응답 본문에 오류 메시지가 포함된 HTTP 상태 코드 500을 일반 텍스트로 반환합니다.이 경우 응답의 일반 텍스트가 필요하지만 responseText를 사용하려고 하면 다음 오류 메시지가 나타납니다.
Uncaught InvalidStateError: Failed to read the 'responseText' property from 'XMLHttpRequest': The value is only accessible if the object's 'responseType' is '' or 'text' (was 'blob').
현재 코드의 단순화된 버전은 다음과 같습니다.
function convertToAudio(file) {
var form = new FormData();
form.append("Video", file, file.name);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if(request.readyState == 4 && request.status == 200) {
console.log(typeof request.response); // should be a blob
} else if(request.readyState == 4 && request.responseText != "") {
console.log(request.responseText);
}
};
request.open("POST", "video_to_audio", true);
request.responseType = "blob";
request.send(form);
}
저는 제 코드의 다른 곳에서 jQuery를 사용하고 있습니다(그래서 jQuery 답변은 허용됩니다). 하지만 제가 알기로는 jQuery는 blob을 처리하지 않습니다.
readyState가 2일 때 responseType을 설정합니다.
그responseType
값은 언제든지 변경될 수 있습니다.readyState
3에 도달합니다.그 때.readyState
2에 도달하면 해당 결정을 내릴 수 있는 응답 헤더에 액세스할 수 있습니다.
업데이트된 샘플 코드:
function convertToAudio(file) {
var form = new FormData();
form.append("Video", file, file.name);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if(request.readyState == 4) {
if(request.status == 200) {
console.log(typeof request.response); // should be a blob
} else if(request.responseText != "") {
console.log(request.responseText);
}
} else if(request.readyState == 2) {
if(request.status == 200) {
request.responseType = "blob";
} else {
request.responseType = "text";
}
}
};
request.open("POST", "video_to_audio", true);
request.send(form);
}
언급URL : https://stackoverflow.com/questions/29023509/handling-error-messages-when-retrieving-a-blob-via-ajax
'programing' 카테고리의 다른 글
도커: apt-utils 설치 문제 발생 (0) | 2023.07.28 |
---|---|
문자로 분할하지 않고 목록에 문자열 삽입 (0) | 2023.07.28 |
"pyenv 설치"에 사용할 수 있는 Python 버전 찾기 (0) | 2023.07.28 |
동적으로 로드된 스크립트에 "crossorigin" 태그를 추가하려면 어떻게 해야 합니까? (0) | 2023.07.28 |
사용자 지정 데이터를 사용하여 Oracle Docker 이미지 생성 (0) | 2023.07.28 |