为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2019-11-14 10:05:19
我正在尝试将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);
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

默认情况下,jQuery序列化数据(传递的data属性)-这意味着将0xFD008001 数字作为“ 4244668417” 字符串(10个字节,而不是4个)传递给服务器,这就是服务器将其视为未按预期方式处理的原因。


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


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


...但这只是整个故事的一部分:XMLHttpRequest.send实现有其自身的局限性。我想,这就是为什么您最好的选择是使用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);


查看完整回答
反对 回复 2019-11-14
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您可以使用atob()和btoa():


var data = new Uint32Array(1);

data[0] = 0xFD008001;

atob(data)

这会将您的二进制数据转换为可以作为文本发送的base64字符串。


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 638 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号