Прежде чем вы скажете, что есть еще один пост ( jQuery $ .ajax (), $ .post отправляет "OPTIONS" как REQUEST_METHOD в Firefox ), да, это совсем не помогает, поэтому ..
Я использую последнюю версию Chrome dev, и когда я пытаюсь отправить файл в API службы удаленного конвертера видео, это работает (все в coffeescript). Давайте назовем этот код 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
Выше возвращает 200 и просто работает. Но у меня есть jQuery на странице, поэтому я подумал, что буду использовать его, поэтому у меня есть версия jQuery, как это. И давайте назовем этот код 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'
Я получаю эти 400 (неверный запрос), говоря, что Origin http://127.0.0.1:3000
не разрешен Access-Control-Allow-Origin.
Но получите это, если я раскомментирую код 1 и закомментирую код 2, обновлю страницу и загрузлю файл, что будет успешно, и закомментирую код 1 и код раскомментирования 2 и обновлю страницу и загрузить файл, СЕЙЧАС код 2 не сгенерирует ошибку 400 Bad request !!
Но если я закрою весь браузер и загрузлю страницу, использующую код 2, загрузка файла выдаст мне ошибку 400, независимо от того, сколько раз я пытаюсь это сделать. Тогда, если я сделаю то, что описывает предыдущий абзац, код 2 будет работать!
И еще одна вещь, журнал Network в консоли Chrome говорит, что запросы, которые я делаю с кодом 2, имеют «OPTIONS» в качестве метода запроса. Принимая во внимание, что в коде 1, метод запроса "POST"
Кто-нибудь знает, что здесь происходит?