Setting XMLHttpRequest.responseType forbidden all of a sudden?

前端 未结 4 1774
谎友^
谎友^ 2020-12-03 21:05

I\'ve been using synchronous XMLHttpRequest with responseType set to \"arraybuffer\" for quite a while to load a binary file and wait until it is loaded. Today, I got this e

4条回答
  •  春和景丽
    2020-12-03 21:24

    Workaround

    For the casual reader, if you still need the synchronous behavior, you can download your content as string and then convert it to byte data

    NOTA:
    This workaround assumes the original request.response is an ASCII text.
    If this assumption doesn't fit your specific use case please see jBinary.

    I convert it to an ArrayBuffer.

    var request = new XMLHttpRequest();
    request.open('GET', url, false);
    request.send(null);
    
    var data;
    if (request.status === 200) {
        data = stringToArrayBuffer(request.response);
    } else {
        alert('Something bad happen!\n(' + request.status + ') ' + request.statusText);
    }
    
    // ...
    
    function stringToArrayBuffer(str) {
        var buf = new ArrayBuffer(str.length);
        var bufView = new Uint8Array(buf);
    
        for (var i=0, strLen=str.length; i

    More reading

    • jBinary: High-level API for working with binary data in Javascript.
    • Sending and Receiving Binary Data: Binary data handling with vanilla Javascript. (Source: Mozilla Developer Network)

    References

    • Converting between strings and ArrayBuffers
    • Renato Mangini's original function str2ab
    • Easier ArrayBuffer <-> String conversion with the Encoding API (Jeff Posnik)

提交回复
热议问题