Pass接受header参数到jquery ajax

aWe*_*per 55 javascript jquery

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

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

    });
});
Run Code Online (Sandbox Code Playgroud)

如何将接受类型设置为json.我不想设置自定义标头或使用beforeSend

kar*_*ick 58

试试这个 ,

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

看这篇文章以供参考:

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


gau*_*171 34

有两种方法可以设置接受标头,如下所示:

1) setRequestHeader('Accept','application/json; charset=utf-8');

2) $.ajax({
    dataType: ($.browser.msie) ? "text" : "json",
    accepts: {
        text: "application/json"
    }
});
Run Code Online (Sandbox Code Playgroud)

  • IE的"文本"值让我感到害怕. (3认同)

kop*_*por 16

在最新版本的jQuery中,将"dataType"设置为适当的值也会设置接受标头.例如,dataType: "json"将accept标头设置为Accept: application/json, text/javascript, */*; q=0.01.


Rom*_*ter 12

其他答案没有回答实际问题,而是提供了一个令人遗憾的解决方法,因为它确实花了10秒钟来确定accepts参数的正确语法.

accepts参数采用一个映射dataTypeAccept标题的对象.在您的情况下,您甚至不需要传递accepts对象,因为将数据类型设置json为足够.但是,如果您确实要配置自定义Accept标头,则执行以下操作:

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

我怎么知道?打开jquery的源代码并搜索"接受".第一个发现告诉你所有你需要知道的:

    accepts: {
        "*": allTypes,
        text: "text/plain",
        html: "text/html",
        xml: "application/xml, text/xml",
        json: "application/json, text/javascript"
    },
Run Code Online (Sandbox Code Playgroud)

正如你所看到的为默认映射text,html,xmljson数据类型.


小智 6

试试这个:

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


Nat*_*ips 5

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

jQuery.ajax({
    url: _this.attr('href'),
    dataType: "json"
});
Run Code Online (Sandbox Code Playgroud)


小智 5

虽然其中一些是正确的,但我发现以前的回答相当混乱.同时,OP要求解决方案而不设置自定义标题或使用beforeSend,所以我一直在寻找更清晰的解释.我希望我的结论能为其他人提供一些启示.

代码

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

不起作用,因为根据jQuery doc(http://api.jquery.com/jquery.ajax/)accepts必须是PlainObject(不是).具体来说,jQuery期望零或多个键值对与每个键值对与它们所接受的MIME类型相关联.所以我最终使用的是:StringdataType

jQuery.ajax({
    ....
    dataType: 'json',
    accepts: {
        json: 'application/json'
    },
    ....
});
Run Code Online (Sandbox Code Playgroud)