По умолчанию JQuery упорядочивает данные (передаваемые в data
собственности) - и это означает, что 0xFD008001
номер получает передается на сервер как '4244668417' строки (10 байт, а не 4), поэтому сервер рассматривает это не так, как ожидалось.
Это необходимо, чтобы предотвратить такое поведение, установив $.ajax
свойство processData
в false
:
By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to 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);
Я получаю 'ArrayBuffer устарел в XMLHttpRequest.send(). Вместо этого используйте ArrayBufferView. ', Но затем получите 'ReferenceError: ArrayBufferView не определен' – Musa
Да, я переписал это, чтобы не использовать' ArrayBuffer'; typedArray фактически поддерживаются как браузером Chrome, так и Firefox как параметр «xhr.send». – raina77ow
Спасибо! Я совершенно новый для javascript, поэтому я думал, что было что-то простое, что я отсутствовал. Ваше объяснение определенно пошло выше и дальше. Благодаря! – user2984509