programing

AJAX를 통해 BLOB를 검색할 때 오류 메시지 처리

newstyles 2023. 7. 28. 21:52

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값은 언제든지 변경될 수 있습니다.readyState3에 도달합니다.그 때.readyState2에 도달하면 해당 결정을 내릴 수 있는 응답 헤더에 액세스할 수 있습니다.

업데이트된 샘플 코드:

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