默认情况下,jQuery 序列化数据(传入data 属性) - 这意味着0xFD008001 数字 以'4244668417' 的形式传递给服务器字符串 (10 个字节,而不是 4 个),这就是服务器不按预期处理它的原因。
有必要通过将$.ajax 属性processData 设置为false 来防止此类行为:
默认情况下,数据作为对象传入 data 选项
(从技术上讲,除字符串之外的任何内容)将被处理并
转换为查询字符串,适合默认的内容类型
“应用程序/x-www-form-urlencoded”。如果你想发送一个
DOMDocument 或其他未处理的数据,将此选项设置为 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);