你好,我想知道是否有办法在 AJAX 中传输二进制响应?这将是一个最终的解决方案,否则我需要将二进制图像实现为一个文件,然后将该文件流式传输给具有不同 URL 的用户。
new Ajax.Request('/viewImage?id=123', {
// request returns a binary image inputstream
onSuccess: function(transport) {
// text example
// alert(transport.responseText)
// QUESTION: is there a streaming binary response?
$('imgElem').src = transport.responseBinary;
},
onFailure: function(transport) {
// handle failure
}
});
可能无法stream二进制数据,但您可以使用 Ajax 检索二进制数据。
这可以使用以下两种方法之一来实现:Javascript类型化数组 https://developer.mozilla.org/en/JavaScript_typed_arrays或 XMLHttpResponse覆盖Mime类型 https://developer.mozilla.org/en/DOM/XMLHttpRequest#overrideMimeType%28%29黑客。阅读 MDN 上的一篇好文章 – 这些示例取自那里:发送和接收二进制数据 http://developer.mozilla.org/en/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data
类型化数组方法如下所示:
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
var byteArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteArray.byteLength; i++) {
// do something with each byte in the array
}
}
};
oReq.send(null);
IE 移动支持不稳定但正在改善.
第二种方法使用名为 overrideMimeType 的 XMLHttpRequest 方法来允许二进制数据不加修改地传递。
var req = new XMLHttpRequest();
req.open('GET', '/myfile.png', false);
// XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
req.overrideMimeType('text\/plain; charset=x-user-defined');
req.send(null);
if (req.status != 200) return '';
// do stuff with req.responseText;
您将获得一个未解析的二进制字符串,您可以在其上使用var byte = filestream.charCodeAt(x) & 0xff;
检索特定字节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)