7

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);
4

2 回答 2

3

我也有同样的问题

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

表示 enctype 必须是 text/plain 或者您需要使用 Fx4+ 所有访问标头都必须正确设置

于 2010-10-27T16:14:02.903 回答
1

好吧,我不知道所有 contentTypes 实际工作,但text/plain在所有 3 个浏览器上都可以:

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);

但是到目前为止,我还没有弄清楚是什么阻止了请求执行任何操作,除了运行成功方法之外,即使返回 505 代码也是如此。添加一个响应头Access-Control-Allow-Origin: *解决了浏览器不想读取返回数据。

于 2010-04-07T13:26:48.850 回答