当responseType=='时获取responseXML;arraybuffer';后装

当responseType=='时获取responseXML;arraybuffer';后装,xml,exception,xmlhttprequest,response,arraybuffer,Xml,Exception,Xmlhttprequest,Response,Arraybuffer,我使用这段代码来检索图像数据,它是有效的 function imageLoadFunction (image, src) { var img = image.getImage(); if (typeof window.btoa == 'function') { var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://cors-anywhere.

我使用这段代码来检索图像数据,它是有效的

        function imageLoadFunction (image, src) {
        var img = image.getImage();
        if (typeof window.btoa == 'function') {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', 'https://cors-anywhere.herokuapp.com/' + src, true);
            xhr.setRequestHeader("Access-Control-Allow-Headers", "origin,x-requested-with");
            xhr.responseType = 'arraybuffer'; // SHOULD BE 'arraybuffer'
            xhr.onload = function(e) {
               if (this.status == 200) {
                   var uInt8Array = new Uint8Array(this.response);
                   var i = uInt8Array.length;
                   var binaryString = new Array(i);
                   while (i--) {
                       binaryString[i] = String.fromCharCode(uInt8Array[i]);
                   }
                   var data = binaryString.join('');
                   var type = xhr.getResponseHeader('content-type');
                   if (type.indexOf('image') === 0) {
                       img.src = 'data:' + type + ';base64,' + window.btoa(data);
                   }
               }
            };
            xhr.send();
        }
    };
我希望在发生错误时从(WMS)服务器捕获异常,为此,我需要使用
responseXML
。然而,似乎存在两个问题:

  • responseType
    'arraybuffer
    ,因此
    responseXML
    表示它应该是
    ”或“document”
  • 如果我试图更改
    响应类型
    ,我会收到一个错误,如果请求已加载或完成,我将无法收到该错误
  • 有没有一种方法可以让我同时使用
    responseType==='arraybuffer'
    responseXML

    基本上,我需要这样实现代码(仅相关部分):


    我知道它还不是XML,但现在处理异常要容易得多。

    responseType==='arraybuffer'
    作为我发现的XML处理的方法是首先将它作为字符串,使用
    string.fromCharCode.apply(null,myArray)
    
    xhr.responseType = 'arraybuffer';
    var text = String.fromCharCode.apply(null, uInt8Array);
    var xmlParser = new DOMParser();
    var asXML = xmlParser.parseFromString(exceptionAsText,"text/xml");
    // do something with response 'asXML'
    
    好的灵感来自:


  • 希望这能有所帮助。

    好的,我自己回答。我应该执行
    var txt=String.fromCharCode.apply(null,uInt8Array)。感谢链接和。
    
    if (type.indexOf('image') === 0) {
       img.src = 'data:' + type + ';base64,' + window.btoa(data);
    } else {
       var txt = String.fromCharCode.apply(null, uInt8Array);
       console.error(txt);
    }
    
    xhr.responseType = 'arraybuffer';
    var text = String.fromCharCode.apply(null, uInt8Array);
    var xmlParser = new DOMParser();
    var asXML = xmlParser.parseFromString(exceptionAsText,"text/xml");
    // do something with response 'asXML'