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" },
正如你看到的默认映射text
, html
, xml
和json
数据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期望零个或多个键值对将每个dataType
types与可接受的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 });