3 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
默認(rèn)情況下,jQuery序列化數(shù)據(jù)(傳遞的data屬性)-這意味著將0xFD008001 數(shù)字作為“ 4244668417” 字符串(10個(gè)字節(jié),而不是4個(gè))傳遞給服務(wù)器,這就是服務(wù)器將其視為未按預(yù)期方式處理的原因。
有必要通過將$.ajaxproperty 設(shè)置processData為來防止這種行為false:
默認(rèn)情況下,作為對(duì)象傳遞給data選項(xiàng)的數(shù)據(jù)(從技術(shù)上講,不是字符串)將被處理并轉(zhuǎn)換為查詢字符串,以適合默認(rèn)的內(nèi)容類型“ application / x-www-form-urlencoded” 。如果要發(fā)送DOMDocument或其他未處理的數(shù)據(jù),請(qǐng)將此選項(xiàng)設(shè)置為false。
...但這只是整個(gè)故事的一部分:XMLHttpRequest.send實(shí)現(xiàn)有其自身的局限性。我想,這就是為什么您最好的選擇是使用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貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用atob()和btoa():
var data = new Uint32Array(1);
data[0] = 0xFD008001;
atob(data)
這會(huì)將您的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為可以作為文本發(fā)送的base64字符串。
添加回答
舉報(bào)