duganets
duganets

Reputation: 1893

Is there any way to send binary data with XMLHttpRequest object?

I'am trying to send binary chunk with XMLHttpRequest

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

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

xhr.send(bindata);

But this approach not works. I've tried to provide Content-type: application/octet-stream, Content-encoding headers for xhr and they don't work either. I am suspect that there is no way to compose request of such kind.

I would appreciate any help.

Upvotes: 6

Views: 16563

Answers (4)

Bo Lu
Bo Lu

Reputation: 827

XMLHttpRequest.sendAsBinary is obsolete. Link

As MDN mentioned, you can directly send binary typed array:

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);

Upvotes: 5

Averius
Averius

Reputation: 175

The section "Handling binary data" here describes how to send and receive binary data via XMLHttpRequest.

Upvotes: 0

Samuel Zhang
Samuel Zhang

Reputation: 1280

W3C has introduced Blob type to XMLHttpRequest in the latest specification. Currently I haven't seen any implementation so far but in near future this is definitely the way to download and upload binary data with XMLHttpRequest.

Upvotes: 1

Aadit Shah
Aadit Shah

Reputation: 19

Yes you can send binary data using XHR. All you need to do is set the appropriate headers and mime-type, and call the sendAsBinary method instead of the simple send method. For example:

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

Upvotes: 1

Related Questions