Nothing is immediately obvious to me, but I haven’t used raw XMLHttpRequest for a while, if you polyfil fetch and FormData you can write code like this instead.
fetch('process.php', {
method: 'POST',
body: new FormData(document.getElementById('my-form'))
});
If you inspect the request in the browser does it include the post data?