Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest/ajax集内容类型_Javascript_Jquery_Json_Ajax - Fatal编程技术网

Javascript XMLHttpRequest/ajax集内容类型

Javascript XMLHttpRequest/ajax集内容类型,javascript,jquery,json,ajax,Javascript,Jquery,Json,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); }

我分别尝试了这两种方法:

注意: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);
}

问题是我们发布到的系统需要一个标题内容类型,其值为“application/json”

按照现在的方式,使用的方法是POST,接受头是“application/json”,内容类型默认为“application/x-www-form-urlencoded;charset=UTF-8”

在第一个示例中,如果
request.setRequestHeader('Content-Type','application/json')
;在Accept标头的上方或下方添加一行,使用的方法更改为选项,Accept标头更改为“text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8”,并且内容类型标头消失,就好像看不到一样

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

在ajax或XMLHttpRequest中设置内容类型头的正确方法是什么

编辑:我应该补充一点,使用firefox rest客户端插件,json字符串、url、accept和content-type头都可以正常工作。我们似乎无法在自己的页面上设置内容标题

在第一个示例中,if request.setRequestHeader('Content-Type','application/json');在Accept标头上方或下方添加1行时,所使用的方法将更改为选项

这是因为您是从嵌入在网页中的JS制作的。更改
内容类型
(更改为无法使用简单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请求。

为什么firefox rest客户端插件不发出跨源请求?或者如果是这样,为什么它能够顺利通过呢?@backcab-因为它是安装的软件,而不是来自不可信网站的一点JavaScript。有一个JSFIDLE示例吗?以前从未使用过XMLHttpRequest对象,但将contentType设置设置为“application/json”应该适用于jquery。我也不认为存在“接受”设置。此外,在进行跨域调用时,会发生选项飞行前请求。这就是您正在做的吗?我的意思是,当使用JQuery.ajax()的默认“application/x-www-form-urlencoded;charset=UTF-8”之外的内容类型值进行跨域调用时,会出现选项预飞行
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