Почему CORS не работает с POST? - PullRequest
3 голосов
/ 01 апреля 2010

Спецификация Mozilla говорит, что простые GET или POST должны быть изначально CORS без предварительной проверки, но до сих пор каждая попытка POST приводила к потере заголовка OPTIONS. Когда я изменяю его с POST, чтобы получить код, немедленно отправляет правильный GET запрос, чтобы межсайтовая часть работала нормально.

Вот уменьшенный пример того, что я делаю в Firefox:

 var destinationUrl = 'http://imaginarydevelopment.com/postURL';
 var invocation = new XMLHttpRequest();
            if (invocation) {
                invocation.open('POST', destinationUrl, true);
                //tried with and without this line
                //invocation.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

                invocation.onreadystatechange = (function Handler() {
                if (invocation.readyState == 4)
                        alert('Request made');
                });
                invocation.send(/* tried with and without data*/);
            }

Вот что у меня уже было в chrome и IE:

var destinationUrl = 'http://imaginarydevelopment.com/postURL';
var destination = { url: destinationUrl, type: 'POST', success: AjaxSuccess, error: AjaxError,
            dataType: 'text', contentType: 'application/x-www-form-urlencoded'
        };
  destination.data = { 'rows': rowList, 'token': token };
            $jq.ajax(destination);

Ответы [ 2 ]

1 голос
/ 27 октября 2010

У меня такая же проблема

https://developer.mozilla.org/En/HTTP_Access_Control

говорит, что enctype должен быть text / plain или вам нужно использовать Fx4 + Все заголовки доступа должны быть установлены правильно

0 голосов
/ 07 апреля 2010

ну, я не знаю, что на самом деле работают все типы контента, но text/plain работает во всех трех браузерах:

var destination = { url: destinationUrl, type: 'POST', success: AjaxSuccess, error: AjaxError,
             contentType: 'text/plain'
        };
var postData={ 'anArray': theArray, 'token': token };
            destination.data=JSON.stringify(postData);

$jq.ajax(destination);

Однако до сих пор я не выяснил, что мешает запросу делать что-либо, кроме запуска метода success, даже когда возвращается код 505. Добавление заголовка ответа Access-Control-Allow-Origin: * решило браузер, не желающий читать возвращаемые данные.

...