Antes de decir que hay otro post (jQuery $.ajax(), $.post sending "OPTIONS" as REQUEST_METHOD in Firefox), sí, doens't ayuda en absoluto, por lo ..Método de petición es OPCIONES vez del poste (existente después StackExchange ayuda doens't)
estoy usando Chrome dev última versión y cuando trato de enviar un archivo a la API de un convertidor de vídeo de servicio remoto como este, funciona (todo está en CoffeeScript) Vamos a llamar a este código 1:
json_string = getNewSignedParams()
xhr = new XMLHttpRequest
xhr.open('POST', some_url, true)
xhr.setRequestHeader("Cache-Control", "no-cache")
xhr.setRequestHeader("Content-Type", "application/octet-stream")
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName)
xhr.setRequestHeader("X-Query-Params", json_string)
xhr.send some_file
Los rendimientos por encima de un 200 y simplemente funciona . Pero tengo jQuery en la página, así que pensé que lo usaría, así que tengo una versión jQuery de lo anterior como esta. Y vamos a llamar a este código 2:
$.ajax
url: some_url
type: 'post'
data: some_file
processData: false
beforeSend: (xhr) ->
xhr.setRequestHeader("Cache-Control", "no-cache")
xhr.setRequestHeader("Content-Type", "application/octet-stream")
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName)
xhr.setRequestHeader("X-Query-Params", json_string)
success: ->
console.log 'success'
me sale este 400 (Bad Request), diciendo Origen http://127.0.0.1:3000
no está permitido por Access-Control-Allow-Origin.
Pero consiga esto, si descomenta el código 1 y comenta el código 2 y actualiza la página y carga un archivo, que será exitoso, comente el código 1 y elimine el código 2, actualice la página y suba un archivo, ¡AHORA el código 2 no arrojará ese error de solicitud 400 Bad!
Pero si cierro el navegador completo y cargo la página que está usando el código 2, la carga de un archivo me generará el error 400 sin importar cuántas veces lo intente. ¡Entonces, si hago lo que describe el párrafo anterior, el código 2 funcionará!
Y una cosa más, el registro de red en la consola de Chrome dice que las solicitudes que hago con el código 2 tienen "OPCIONES" como el método de solicitud. Mientras que en el código 1, el método de solicitud es "POST"
¿Alguien sabe qué está pasando aquí?
Entonces, cómo hacer que esto se ejecute en dominio cruzado –
Con un XHR normal, esto no es posible. Sin embargo, podrías hacer algunos hacks como cargar tus datos json en una etiqueta de script (anexarla a la cabecera) y llamar a una función [JSONP] (http://en.wikipedia.org/wiki/JSONP). – Timo