通过HTTP在JavaScript中发送二进制数据

我正在尝试将HTTP

POST发送到网络上的设备。我很想将四个特定字节的数据发送到设备,但我似乎只能将字符串发送到设备。反正有使用JavaScript发送原始二进制文件吗?

这是我用来执行POST的脚本,除非我在数据字段中输入字符串,否则它目前不会运行。有任何想法吗?

(function ($) {

$.ajax({

url: '<IP of Address>',

type: 'POST',

contentType: 'application/octet-stream',

//data:'253,0,128,1',

data:0xFD008001,

crossDomain: true

});

})(jQuery);

回答:

默认情况下,jQuery序列化数据(传递的data属性)-这意味着将0xFD008001数字 作为“ 4244668417” 字符串

(10个字节,而不是4个)传递给服务器,这就是服务器将其视为未按预期方式处理的原因。

有必要通过将$.ajaxproperty 设置processData为来防止这种行为false

默认情况下,作为对象传递给data选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,以适合默认的内容类型“ application /x-www-form-urlencoded”。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。

…但这只是整个故事的一部分:XMLHttpRequest.send实现有其自身的局限性。我想这就是为什么最好的选择是使用 制作自己的序列化

// Since we deal with Firefox and Chrome only 

var bytesToSend = [253, 0, 128, 1],

bytesArray = new Uint8Array(bytesToSend);

$.ajax({

url: '%your_service_url%',

type: 'POST',

contentType: 'application/octet-stream',

data: bytesArray,

processData: false

});

或根本不使用jQuery:

var bytesToSend = [253, 0, 128, 1],

bytesArray = new Uint8Array(bytesToSend);

var xhr = new XMLHttpRequest();

xhr.open('POST', '%your_service_url%');

xhr.setRequestHeader('Content-Type', 'application/octet-stream');

xhr.send(bytesArray);

以上是 通过HTTP在JavaScript中发送二进制数据 的全部内容, 来源链接: utcz.com/qa/412647.html

回到顶部