在jQuery AJAX GET调用中传递请求标头


241

我正在尝试使用jQuery在AJAX GET中传递请求标头。在下面的块中,“数据”自动传递查询字符串中的值。有没有办法在请求标头中传递该数据?

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         data: { signature: authHeader },
         type: "GET",
         success: function() { alert('Success!' + authHeader); }
      });

以下内容也不起作用

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         beforeSend: { signature: authHeader },
         async: false,                    
         type: "GET",
                    success: function() { alert('Success!' + authHeader); }
      });

Answers:


288

用途beforeSend

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         data: { signature: authHeader },
         type: "GET",
         beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');},
         success: function() { alert('Success!' + authHeader); }
      });

http://api.jquery.com/jQuery.ajax/

http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method


4
我知道这已经很老了。但我想补充一点:afterSend:function(xhr){xhr.setRequestHeader('X-Test-Header','test-value');}
matthew_360 2013年

beforeSend:function(xhr){xhr.setRequestHeader('X-Test-Header','test-value');}在chrome和Firefox中效果很好,但在IE8中效果不佳。没有发送X-Test-Header。如何解决?Thx
user1940268 2015年

我已经尝试过,但是当我使用“ jquery-1.11.1.min.js”传递标题详细信息时,它会引发错误
Ghanshyam Baravaliya

4
看到下面的答案,更有意义
thedanotto

如果要添加X-Test-Header和添加X-Test-Header到该beforeSend怎么办?
SI 8

393

从jQuery 1.5开始,headers您可以按以下方式传递哈希值:

$.ajax({
    url: "/test",
    headers: {"X-Test-Header": "test-value"}
});

http://api.jquery.com/jQuery.ajax

标头(增加了1.5):与请求一起发送的附加标头键/值对的映射。此设置在调用beforeSend函数之前设置;因此,标头设置中的任何值都可以从beforeSend函数中覆盖。


6
可以全局设置吗?
2013年

77
是:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}})
卢卡斯(Lukas)2013年

6
jQuery的文档不推荐使用$ .ajaxSetup()了(api.jquery.com/jQuery.ajaxSetup
格伦塞莱

2
@Glen他们的理由是,插件可能期望默认设置起作用。就个人而言,我认为如果全局更改某些内容,则取决于默认设置的某些内容可能无法正常工作。
MiniRagnarok

1
@Trip我对全局的建议...为ajax调用(抽象)编写自己的包装器,而不是调用$ .ajax()。
Erik Philips

44

$.ajax({
            url: URL,
            type: 'GET',
            dataType: 'json',
            headers: {
                'header1': 'value1',
                'header2': 'value2'
            },
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
               // CallBack(result);
            },
            error: function (error) {
                
            }
        });


尝试从标头中提取HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));错误时,使用jQuery 1.7.2和C#API 2.x,因为未找到给定的标头。因为r.Headers为空。
Jeb50

您可能想尝试类似-string [] ids = System.Web.HttpContext.Current.Request.Headers [“ logonID”]。Split(',');
发烧友
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.