bac*_*cab 11 javascript ajax jquery json
我分别试过这两件事:
注意: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);
}
Run Code Online (Sandbox Code Playgroud)
和
var options = {
type: "POST",
url: url,
dataType: "json",
data: jsonString,
accept: "application/json"
};
$.ajax(options)
Run Code Online (Sandbox Code Playgroud)
问题是我们发布的系统要求标题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"并且Content-Type标题消失,就好像没有看到一样.
在第二个示例中,如果在选项中的任何位置添加了contentType:"application/json",则会发生与第一个示例中相同的事情.
在ajax或XMLHttpRequest中设置Content-Type标头的正确方法是什么?
编辑:我应该添加使用firefox rest客户端插件,json字符串,url,以及accept和内容类型标题都可以正常工作.我们似乎无法在我们自己的页面上设置内容标题.
在第一个例子中,如果是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
Run Code Online (Sandbox Code Playgroud)
然后浏览器将发出您要求它发出的POST请求.
归档时间: |
|
查看次数: |
24786 次 |
最近记录: |