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

TA贡献1812条经验 获得超5个赞
您可以使用atob()和btoa():
var data = new Uint32Array(1);
data[0] = 0xFD008001;
atob(data)
这会将您的二进制数据转换为可以作为文本发送的base64字符串。
添加回答
举报