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


慕田峪4524236
浏览 639回答 3
3回答

海绵宝宝撒

默认情况下,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&nbsp;var bytesToSend = [253, 0, 128, 1],&nbsp; &nbsp; bytesArray = new Uint8Array(bytesToSend);$.ajax({&nbsp; &nbsp;url: '%your_service_url%',&nbsp; &nbsp;type: 'POST',&nbsp; &nbsp;contentType: 'application/octet-stream',&nbsp;&nbsp;&nbsp; &nbsp;data: bytesArray,&nbsp; &nbsp;processData: false});或者根本不使用jQuery:var bytesToSend = [253, 0, 128, 1],&nbsp; &nbsp; bytesArray = new Uint8Array(bytesToSend);var xhr = new XMLHttpRequest();xhr.open('POST', '%your_service_url%');xhr.setRequestHeader('Content-Type', 'application/octet-stream');xhr.send(bytesArray);

慕雪6442864

您可以使用atob()和btoa():var data = new Uint32Array(1);data[0] = 0xFD008001;atob(data)这会将您的二进制数据转换为可以作为文本发送的base64字符串。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript