Hoe voeg ik headergegevens toe in XMLHttpRequest bij gebruik van formdata?

Ik probeer een API voor het uploaden van bestanden te implementeren, die hier wordt gegeven:

Mediafire-bestand uploaden

Ik kan de Berichtgegevens& Gegevens ophalen, maar heb geen idee hoe het kenmerk x-filenamemoet worden verzonden, wat bedoeld is als Headergegevenszoals aangegeven in de API-handleiding.

Mijn code:

xmlhttp=new XMLHttpRequest();
var formData = new FormData();
formData.append("Filedata", document.getElementById("myFile").files[0]);
var photoId = getCookie("user");
// formData.append("x-filename", photoId);            //tried this but doesn't work
// xmlhttp.setRequestHeader("x-filename", photoId);   //tried this too (gives error) [edited after diodeous' answer]
xmlhttp.onreadystatechange=function()
{
    alert("xhr status : "+xmlhttp.readyState);
}
var url = "http://www.mediafire.com/api/upload/upload.php?"+"session_token="+getCookie("mSession")+"&action_on_duplicate=keep";
xmlhttp.open("POST", url);
// xmlhttp.setRequestHeader("x-filename", photoId);   //tried this too, doesnt work. Infact nothing gets uploaded on mediafire.  [edited after apsillers' answer]
// cant get response due to same origin policy
xmlhttp.send(formData);

Antwoord 1, autoriteit 100%

Uw fout

InvalidStateError: er is geprobeerd een object te gebruiken dat niet of niet langer bruikbaar is

verschijnt omdat u setRequestHeadernadatopenmoet aanroepen. Verplaats eenvoudig uw setRequestHeader-regel onder uw open-regel (maar vóór send):

xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);

Antwoord 2, autoriteit 35%

Gebruik: xmlhttp.setRequestHeader(key, value);


Antwoord 3

Controleer of het sleutel/waarde-paar daadwerkelijk wordt weergegeven in het verzoek:

In Chrome, ergens gevonden zoals: F12: Developer Tools > Network Tab > Whatever request you have sent > "view source" under Response Headers

Afhankelijk van uw testworkflow, als het door u toegevoegde paar er niet is, moet u wellicht uw browsercache wissen. Om te controleren of uw browser uw meest up-to-date code gebruikt, kunt u de bronnen van de pagina controleren, in Chromevindt u dit ergens als:
F12: Developer Tools > Sources Tab > YourJavascriptSrc.jsen controleer je code.

Maar zoals andere antwoorden al hebben gezegd:

xhttp.setRequestHeader(key, value);

moet een sleutel/waarde-paar toevoegen aan uw verzoekkop, zorg ervoor dat u deze plaatst na uw open()en vóór uw send()

Other episodes