gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:14:39 25 4
gpt4 key购买 nike

我正在尝试向网络上的设备发送 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 number 作为 ' 4244668417' string(10 个字节,而不是 4 个字节),这就是服务器未按预期对待它的原因。

有必要通过将 $.ajax 属性 processData 设置为 false 来防止此类行为:

By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.

...但这只是整个故事的一部分:XMLHttpRequest.send 实现有自己的 restrictions .这就是为什么我认为你最好的选择是使用 TypedArrays 制作你自己的序列化程序。 :

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

关于javascript - 通过 HTTP 在 javascript 中发送二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com