XMLHttpRequest / ajax设置内容

我已经单独尝试了这两件事情:

注意:url是一个包含https url的变量,jsonString包含一个有效的json字符串

var request = new XMLHttpRequest();
try{
    request.open("POST", url);
    request.setRequestHeader('Accept', 'application/json');
    request.send(jsonString);
} catch(e) {
    alert(e);
}

var options = {
    type: "POST",
    url: url,
    dataType: "json",
    data: jsonString,
    accept: "application/json"
};

$.ajax(options)

问题是我们要发布的系统需要头文件Content-Type,其值为“application / json”。

使用现在的方式,使用的方法是POST,Accept头是“application / json”,而Content-Type默认为“application / x-www-form-urlencoded; charset = UTF-8”

在第一个例子中,如果request.setRequestHeader('Content-Type','application / json'); 在Accept头部之上或之下添加1行,所使用的方法变为OPTIONS,Accept头部变为“text / html,application / xhtml + xml,application / xml; q = 0.9,/; q = 0.8”,内容类型标题消失,就像它没有看到。

在第二个示例中,如果在选项内的任意位置添加contentType:“application / json”,则会发生在第一个示例中发生的相同情况。

在ajax或XMLHttpRequest中设置Content-Type标头的正确方法是什么?

编辑:我应该补充说,使用Firefox的休息客户端插件,JSON字符串,网址,接受和内容类型头一切正常。 我们似乎无法获取我们自己页面上的内容标题。


在第一个例子中,如果request.setRequestHeader('Content-Type','application / json'); 在Accept标题的上方或下方添加1行,则使用的方法更改为OPTIONS

这是因为你正在通过嵌入在网页中的JS进行交叉源请求。 更改content-type (不能用简单的HTML表单创建)会触发一个预检请求,请求服务器的许可以进行实际请求。

您需要设置服务器以使用适当的CORS头进行响应以授予权限。

HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Access-Control-Allow-Origin: http://your.site.example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Content-Type

然后浏览器将发出您要求的POST请求。

链接地址: http://www.djcxy.com/p/46247.html

上一篇: XMLHttpRequest/ajax set Content

下一篇: 405 angular js posting to web service (firefox)