Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当尝试放置xmlHTTPRequest的image/png响应时,我得到的是垃圾数据_Javascript_Html_Image_Css_Xmlhttprequest - Fatal编程技术网

Javascript 当尝试放置xmlHTTPRequest的image/png响应时,我得到的是垃圾数据

Javascript 当尝试放置xmlHTTPRequest的image/png响应时,我得到的是垃圾数据,javascript,html,image,css,xmlhttprequest,Javascript,Html,Image,Css,Xmlhttprequest,我正在使用下面的代码调用生成captcha的web服务。已正确获取响应,但在尝试将结果附加到div下时,图像显示为垃圾文本 var xmlHttp=new XMLHttpRequest(); xmlHttp.onreadystatechange=函数(){ if(xmlHttp.readyState==4&&xmlHttp.status==200) { alert(xmlHttp.getAllResponseHeaders()); document.getElementById(“captc

我正在使用下面的代码调用生成captcha的web服务。已正确获取响应,但在尝试将结果附加到div下时,图像显示为垃圾文本

var xmlHttp=new XMLHttpRequest();
xmlHttp.onreadystatechange=函数(){
if(xmlHttp.readyState==4&&xmlHttp.status==200)
{ 
alert(xmlHttp.getAllResponseHeaders());
document.getElementById(“captchaDiv2”).innerHTML=“”;
}
}
open(“GET”,captcharc,true);//异步时为true

xmlHttp.send(空)这个答案使用了长话短说中的信息:您在XHR中获得的字符串有点难以转换为base64,因为该字符串似乎已转换为UTF-8,然后似乎已损坏,base64字符串不再有效。此外,如果您尝试
btoa(xmlHttp.responseText)
则会因为非ascii字符而在Chrome中出错

但是,有一个解决办法。首先,创建一个空

var xmlHttp = new XMLHttpRequest();
xmlHttp.responseType = "arraybuffer";
xmlHttp.onreadystatechange = function() { 
  if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { 
    document.getElementById("captchaImg").setAttribute('src', 'data:image/png;base64,' + btoa(String.fromCharCode.apply(null, new Uint8Array(xmlHttp.response))));
  }
}
xmlHttp.open("GET", captchaSrc, true); // true for asynchronous
xmlHttp.send(null);

这里的诀窍是确保我们的数据安全无误。从兼容性的角度来看,如果我从MDN()正确理解的话,类型化数组的支持来自IE 10,甚至在旧的Safari 5.1(Windows的最新版本)中也得到了支持.

这个答案使用了长话短说中的信息:您在XHR中获得的字符串有点难以转换为base64,因为该字符串似乎已转换为UTF-8,然后似乎已损坏,base64字符串不再有效。此外,如果您尝试
btoa(xmlHttp.responseText)
则会因为非ascii字符而在Chrome中出错

但是,有一个解决办法。首先,创建一个空

var xmlHttp = new XMLHttpRequest();
xmlHttp.responseType = "arraybuffer";
xmlHttp.onreadystatechange = function() { 
  if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { 
    document.getElementById("captchaImg").setAttribute('src', 'data:image/png;base64,' + btoa(String.fromCharCode.apply(null, new Uint8Array(xmlHttp.response))));
  }
}
xmlHttp.open("GET", captchaSrc, true); // true for asynchronous
xmlHttp.send(null);

这里的诀窍是确保我们的数据安全无误。从兼容性的角度来看,如果我从MDN()正确理解的话,对类型化数组的支持来自IE 10,甚至在旧的Safari 5.1(这是Windows的最后一个版本)中也得到了支持。

删除所有javascript并放入
怎么样?因为我需要解析标头并删除一些信息(captcha)以供进一步验证。如果有一种方法可以按照您的建议获取标题的信息,那么这将是一个有效的解决方案。删除所有javascript并放入
无法做到这一点,因为我需要解析标题并从中删除一些信息(captcha)以进行进一步验证。如果有一种方法可以按照您的建议获取头部的infor,那么这将是一个有效的解决方案