Cómo crear una solicitud AJAX con JavaScript que contenga datos de archivo y publicación

¿Cómo puedo crear una solicitud HTTP que envíe un archivo y algunos datos de publicación con JavaScript que pueda recibir un servidor PHP?

He encontrado la siguiente sugerencia pero no parece estar completa

xhr.open("POST", "upload.php");
var boundary = '---------------------------';
boundary += Math.floor(Math.random()*32768);
boundary += Math.floor(Math.random()*32768);
boundary += Math.floor(Math.random()*32768);
xhr.setRequestHeader("Content-Type", 'multipart/form-data; boundary=' + boundary);
var body = '';
body += 'Content-Type: multipart/form-data; boundary=' + boundary;
//body += '\r\nContent-length: '+body.length;
body += '\r\n\r\n--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="';
body += 'myfile"; filename="'+file.fileName+'" \r\n';
body += "Content-Type: "+file.type;
body += '\r\n\r\n';
body += file.getAsBinary();
body += '\r\n'
body += '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="submitBtn"\r\n\r\nUpload\r\n';
body += '--' + boundary + '--';
xhr.setRequestHeader('Content-length', body.length);

Para que esto funcione, necesito tener una variable 'archivo' que contenga un campo de archivo de tipo de entrada, pero ¿dónde colocar datos de publicación adicionales? Quiero enviar un texto descriptivo también. supongamos que también necesitaría usar xhr.send para enviar la solicitud ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta