Rajdeep Siddhapura
Estoy tratando de implementar una API de carga de archivos, dada aquí:
Subir archivo de Mediafire
Puedo cargar con éxito el Publicar datos & Obtener datospero no tengo ni idea de cómo enviar el x-nombre de archivo atributo, que está destinado a ser datos de cabecera 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);
apsilleres
tu error
InvalidStateError: se intentó usar un objeto que no se puede usar o ya no se puede usar
aparece porque debes llamar setRequestHeader
después vocación open
. Simplemente mueva su setRequestHeader
línea debajo de su open
línea (pero antes send
):
xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);
-
Se deshizo del error, pero aún no funciona. En realidad, no puedo obtener una respuesta de Mediafire debido a la misma política de origen. No sé cuál es el problema, ¿podrías comprobar el API de Mediafire & quiero saber cuál es el problema, el archivo se cargó con éxito en mediafire sin esta edición, ¡ahora no se carga nada!
– Rajdeep Siddhapura
29/10/2013 a las 16:17
-
sin esa línea, el archivo se estaba cargando, ¡pero con el nombre predeterminado!
– Rajdeep Siddhapura
29/10/2013 a las 16:19
-
eso aclara un poco las cosas. Consulte Descripción de XMLHttpRequest sobre CORS. La política del mismo origen permite que las solicitudes “simples” lleguen al cliente y luego decide si el cliente puede leer los resultados. Las solicitudes “no simples” se verifican con una solicitud de “verificación previa” antes de enviar la solicitud real. Agregar un encabezado no simple cambió su solicitud de simple a no simple. En ambos casos, supongo que no pudo leer la respuesta del servidor.
– apsillers
29/10/2013 a las 16:21
-
o como solución alternativa, ¿puedo cambiar el nombre del archivo cargado antes de enviarlo a mediafire? Entonces no tendré que enviar un parámetro adicional.
– Rajdeep Siddhapura
29/10/2013 a las 16:22
-
Ohh, es bueno saber que agregar encabezados hace que la solicitud no sea simple. Gracias por la ayuda 🙂
– Rajdeep Siddhapura
29/10/2013 a las 16:24
Utilizar: xmlhttp.setRequestHeader(key, value);
-
Intenté esto también, javascript deja de ejecutarse después de esta declaración, ¡no funciona! (Agregaré esto a mi pregunta)
– Rajdeep Siddhapura
29/10/2013 a las 14:45
Verifique si el par clave-valor realmente aparece en la solicitud:
En Cromoencontrado 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 deba borrar el caché de su navegador. Para verificar que su navegador está utilizando su código más actualizado, puede verificar las fuentes de la página, en Cromo esto 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 al encabezado de su solicitud, solo asegúrese de colocarlo después de su open()
y ante tu send()
¿Podría darnos el texto de error para
setRequestHeader
?– apsillers
29 de octubre de 2013 a las 14:48
Es javascirpt, por lo tanto, no hay mensajes de error, el script simplemente deja de ejecutarse, es posible que no esté permitido
– Rajdeep Siddhapura
29/10/2013 a las 14:53
Solo para aclarar, quiere decir que no hay errores en su consola de JavaScript del navegador?
– apsillers
29/10/2013 a las 15:01
@apsillers ohh, nunca supe nada Consola Javascript Error: no detectado InvalidStateError: se intentó usar un objeto que no se puede usar o ya no se puede usar. upload.php:42 uploadAjax upload.php:42 onclick upload.php:130
– Rajdeep Siddhapura
29/10/2013 a las 15:11
La línea 42 de @apsillers se establece en la línea de encabezado de solicitud y la línea 130 tiene un botón con el atributo onclick que llama al código anterior
– Rajdeep Siddhapura
29/10/2013 a las 15:15