Pass接受header参数给jquery ajax

当我在Chrome控制台中检查以下代码时,会显示一个请求标头Accept:undefined

 jQuery.ajax({ url: _this.attr('href'), accepts: "application/json; charset=utf-8", }); }); 

如何将接受types设置为json。 我不想设置自定义标题或使用beforeSend

尝试这个 ,

 $.ajax({ headers: { Accept: "text/plain; charset=utf-8", "Content-Type": "text/plain; charset=utf-8" } data: "data", success : function(response) { // ... } }); 

看到这个post作为参考:

使用jQuery无法正确设置Accept HTTP标头

有两种备选方法来设置accept头,如下所示:

 1) setRequestHeader('Accept','application/json; charset=utf-8'); 2) $.ajax({ dataType: ($.browser.msie) ? "text" : "json", accepts: { text: "application/json" } }); 

在最近的jQuery版本中,将“dataType”设置为适当的值也会设置accept头。 例如, dataType: "json"将accept头设置为Accept: application/json, text/javascript, */*; q=0.01 Accept: application/json, text/javascript, */*; q=0.01

其他答案不回答真正的问题,而是提供一个可耻的解决方法,因为它确实需要10秒钟来弄清楚accepts参数的正确语法。

Accept参数接受一个将dataType映射到Accept头的对象。 在你的情况下,你甚至不需要传递accepts对象,因为将数据types设置为json应该足够了。 但是,如果你想configuration一个自定义的Accept头,这是你所做的:

accepts: {"*": "my custom mime type" },

我怎么知道? 打开jQuery的源代码并search“接受”。 第一个发现告诉你所有你需要知道的:

  accepts: { "*": allTypes, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, 

正如你看到的默认映射texthtmlxmljson数据types。

你已经确定了接受参数为你想要的,并且keyur正确地向你展示了设置它的正确方法,但是如果你将DataType设置为“json”,那么它会自动将accept的默认值设置为你想要的值根据jQuery的参考 。 所以你需要的是:

 jQuery.ajax({ url: _this.attr('href'), dataType: "json" }); 

尝试这个:

 $.ajax({ beforeSend: function (xhr){ xhr.setRequestHeader("Content-Type","application/json"); xhr.setRequestHeader("Accept","text/json"); }, type: "POST", //........ }); 

虽然其中一些是正确的,但是我发现以前的回答很混乱。 与此同时,OP要求解决scheme,而不设置自定义标题或使用beforeSend ,所以我正在寻找一个更清晰的解释。 我希望我的结论能够给别人一些启示。

代码

 jQuery.ajax({ .... accepts: "application/json; charset=utf-8", .... }); 

不工作,因为根据jQuery文档( http://api.jquery.com/jquery.ajax/ ), accepts必须是PlainObject (而不是String )。 具体来说,jQuery期望零个或多个键值对将每个dataTypetypes与可接受的MIMEtypes相关联。 所以我最终使用的是:

 jQuery.ajax({ .... dataType: 'json', accepts: { json: 'application/json' }, .... }); 

我使用jQuery.getJSON( url [, data ] [, success( data, textStatus, jqXHR ) ] )例如:

 var url="my.php"; $.getJSON( url, myObj ) .done(function( json ) { ... }) /* got JSON from server */ .fail(function( jqxhr, textStatus, error ) { var err = textStatus + ", " + error; console.log( "Failed to obtain JSON data from server: " + err ); }); /* failed to get JSON */ 

getJSON简写为:

 $.ajax({ dataType: "json", url: url, data: data, success: success });