通过jQuery AJAX接收图像并显示图像,而不需要服务器对图像进行base64编码
Receiving an image via jQuery AJAX and displaying the image without the server base64 encoding the image
我通过jQuery AJAX请求从我的http服务器请求图像(image/jpeg
或image/png
):
$.ajax({
'url': '/my/cool/api/server',
'contentType': 'application/json',
'data': '{"some":1,"cool":2,"request":3,"data":4}',
'type': 'POST'
}).done(function(data) {
// what to do here?
});
服务器返回正确的图像。我想使用src=data:image/png;base64,...
语法在img
标记中显示返回的图像。我不希望服务器在base64包装图像,所以我需要通过Javascript在web浏览器中这样做。我该怎么做呢?回调中的data
变量似乎被弄乱了。我可以让jQuery为我返回原始图像字节吗?或者让jQuery为我编码base64的数据?
我已经得到了一个工作的香草JS版本,因此我知道原则上它是可能的。我正在寻找这个工作香草JS代码的工作jQuery变体:
var xhr = new XMLHttpRequest();
xhr.open('GET', '/my/cool/api/server', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
var arr = new Uint8Array(this.response);
var raw = String.fromCharCode.apply(null, arr);
var b64 = window.btoa(raw);
var imgElem = document.getElementById('TODOImg');
imgElem.src = 'data:image/jpeg;base64,' + b64;
};
xhr.send();
如果您想做您已经做过的事情,但使用jQuery,您或多或少都可以做到。
在jQuery的"done"函数中,你所做的与在原生XHR请求的"onload"函数中所做的完全相同。
但是,jQuery的ajax并不真正支持二进制数据,因此您可能需要将二进制传输插入其中—参见http://www.henryalgus.com/reading-binary-files-using-jquery-ajax。
相关文章:
- 背景图像顶部的滚动图像不移动
- javascript如果图像不存在don't加载它
- 如何在不需要单击按钮的情况下获取选项的值
- Javascript不需要的关闭行为
- ajax加载()后,包含图表的图像不会重新绘制
- 删除客户端浏览器上不需要的内容
- 如果图像标记是用javascript编写的,并且需要用户输入,那么图像不会随页面加载吗
- 不允许在字段中输入不需要的字符
- 不需要的JSON响应
- 如何使图像适合TD,而不需要包装在不同的屏幕分辨率上
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器
- HTML图像“onclick”在调用javascript函数时重定向到另一个页面(不需要)
- 正在删除图像之间不需要的空间
- 用jquery函数上传图像或文件,只需要它,不需要php,也不需要更多的代码
- 在HTML中旋转图像-不需要
- 当单选按钮被选中时,图像不透明,但需要隐藏实际的按钮
- 通过jQuery AJAX接收图像并显示图像,而不需要服务器对图像进行base64编码
- 当不需要时,删除HTML背景图像
- 图像 CSS 样式上不需要的边框
- 加载请求不需要的图像