XMLHttpRequest对象是否有发送二进制数据的方法?

5

我正在尝试使用XMLHttpRequest发送二进制数据块

var xhr = new XMLHttpRequest();
var bindata = 0x0f0f;

xhr.open("POST", "binary_reader.php");

xhr.send(bindata);

但是这种方法不起作用。我尝试为xhr提供Content-type: application/octet-streamContent-encoding头部,但它们也不起作用。我怀疑没有办法组合这种请求。 我会非常感激任何帮助。

1
您是在尝试使用这种方式发送文件吗?有些二级规范上的变化允许发送 Blob,但具体取决于您要做什么:http://www.w3.org/TR/XMLHttpRequest2/#the-send-method - Nick Craver
不,这不是一个文件。它是一个编码的数据包,应该被发送到服务器上。服务器则会以类似结构的数据包进行响应。我知道我可以采用编码/解码数据包的方式在发送/接收时使用base64,但我试图节省CPU时间和数据包大小开销,因为这是一个Web应用程序的“实时性”。 - duganets
4个回答

4

XMLHttpRequest.sendAsBinary已经过时。 链接

MDN所述,您可以直接发送二进制类型的数组:

var myArray = new ArrayBuffer(512);
var longInt8View = new Uint8Array(myArray);

// generate some data
for (var i=0; i< longInt8View.length; i++) {
  longInt8View[i] = i % 256;
}

var xhr = new XMLHttpRequest;
xhr.open("POST", url, false);
xhr.send(myArray);

第一个链接已经失效。 - Joseph Quinsey

1

是的,您可以使用XHR发送二进制数据。您需要做的就是设置适当的标头和MIME类型,并调用sendAsBinary方法而不是简单的send方法。例如:

var req = new XMLHttpRequest();  
req.open("POST", url, true);  
// set headers and mime-type appropriately  
req.setRequestHeader("Content-Length", 741);  
req.sendAsBinary(aBody);

1

W3C在最新规范中引入了Blob类型到XMLHttpRequest。目前我还没有看到任何实现,但在不久的将来,这绝对是使用XMLHttpRequest下载和上传二进制数据的方式。


0

章节“处理二进制数据”这里描述了如何通过XMLHttpRequest发送和接收二进制数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接