javascript - w3schools - ¿Cómo agregar datos de encabezado en XMLHttpRequest cuando se usa formdata?
formdata() javascript (3)
Tu error
InvalidStateError: se intentó utilizar un objeto que no es, o ya no es, utilizable
aparece porque debe llamar a setRequestHeader
después de llamar a open
. Simplemente mueva su línea setRequestHeader
debajo de su línea open
(pero antes de send
):
xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);
Estoy tratando de implementar una API de carga de archivos, dada aquí:
Subir archivo Mediafire
Puedo cargar con éxito los datos de publicación y obtención de datos , pero no tengo idea de cómo enviar el atributo x-filename , que se supone que es información de encabezado como se indica en la guía API.
Mi código :
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);
Utilice: xmlhttp.setRequestHeader(key, value);
Verifique si el par clave-valor se está mostrando en la solicitud:
En Chrome , se encuentra en algún lugar como: F12: Developer Tools > Network Tab > Whatever request you have sent > "view source" under Response Headers
Dependiendo de su flujo de trabajo de prueba, si el par que agregó no está allí, es posible que solo necesite borrar el caché de su navegador. Para verificar que su navegador está usando su código más actualizado, puede verificar las fuentes de la página, en Chrome, se encuentra en algún lugar como: F12: Developer Tools > Sources Tab > YourJavascriptSrc.js
y verifique su código.
Pero como han dicho otras respuestas:
xhttp.setRequestHeader(key, value);
debe agregar un par clave-valor a su encabezado de solicitud, solo asegúrese de colocarlo después de open()
y antes de send()