как отправлять JavaScript запрос в бинарном режиме на сайт с PHP

Использую пока JavaScript запрос рабочий такой:

let user_name = document . getElementById ( 'login' ) . value ;
localStorage  . setItem ( 'username'  , user_name ) ;
document . getElementById ( 'login' ) . value = "" ;
let xhr = new XMLHttpRequest ( ) ;
xhr . open  ( 'POST'  , 'php/checkusername.php'  ) ;
xhr . setRequestHeader  ( "Content-type"  , "application/x-www-form-urlencoded" ) ;
xhr . onload = fun_make_answer ;
let sname = fun_encrypt_username ( user_name ) ;
xhr . send  ( 'name=' + encodeURIComponent ( sname ) ) ;

в нём я шифрую имя пользователя и отправляю текстом в checkusername.php :

if ( isset ( $_POST['name']) ) {
  $user_name = $_POST ['name'] ;
  # имя юзера зашифровано сессионным входящим паролем
  $user_name  = DecryptUserName ( $user_name ) ;
  $_SESSION [ 'checkusername'  ] = $user_name ;
  ...

Никак не могу найти понятные примеры, как делать send не текстом, а в бинарном режиме. Бинарный нужен для отправки более длинных сообщений. Так как конвертирование в текст увеличивает размер данных в два раза.
Показывают везде то json , то FormData. Какой способ использовать и как? желательно с минимальными исправлениями кода


Ответы (1 шт):

Автор решения: Evgeniy Leonidov

Для отправки бинарных данных в XMLHttpRequest берём объект FormData (не претендую на работоспособность! Не проверяю!):

let user_name = document.getElementById('login').value;
localStorage.setItem('username', user_name);
document.getElementById('login').value = "";
let xhr = new XMLHttpRequest();
xhr.open('POST', 'php/checkusername.php');
xhr.onload = fun_make_answer;
let data = new FormData();
let sname = fun_encrypt_username(user_name);
data.append('name', sname);
xhr.send(data);
→ Ссылка