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

292

我正在尝试使用jQuery在AJAX GET中传递请求头。 在以下代码块中,“data”自动将值传递到查询字符串中。 是否有一种方法可以将该数据传递到请求标头中?

$.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); }
      });
3个回答

449
自jQuery 1.5起,您可以按照以下方式传递一个headers哈希。
$.ajax({
    url: "/test",
    headers: {"X-Test-Header": "test-value"}
});

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

headers(1.5版本新增):提供额外的头部信息,以与请求一起发送。这个设置在调用beforeSend函数之前设置; 因此,headers设置中的任何值都可以从beforeSend函数内部被覆盖。


83
是的:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}}) 的意思是在使用jQuery发送AJAX请求时,设置HTTP请求头部信息中名为"X-Test-Header"的字段值为"test-value"。 - Lukas
6
jQuery文档不再建议使用$.ajaxSetup()方法(http://api.jquery.com/jQuery.ajaxSetup/)。 - Glen Selle
2
他们的理由是插件可能期望默认设置能够正常工作。个人认为,如果您全局更改某些内容,那么依赖默认设置的功能可能无法正常工作,这是必然的。 - MiniRagnarok
1
@Trip 我的建议是在全球范围内...编写自己的ajax调用包装器(抽象)而不是调用$.ajax()。 - Erik Philips
1
@Rishav,头部不允许使用JSON对象。您需要使用JSON.stringify对其进行字符串化,然后在服务器上解析它。 - Lukas
显示剩余4条评论

325

4
我知道现在这已经很老了。但是我想补充一下,在这个句子后面应该加上一个逗号:beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');} - matthew_360
我已经尝试过了,但当我使用"jquery-1.11.1.min.js"传递头部细节时,它会抛出错误。 - Ghanshyam Baravaliya
4
好的,请提供需要翻译的内容。 - thedanotto
如果我想在 beforeSend 中添加 X-Test-HeaderX-Test-Header,该怎么办? - Si8
如果我想在“x-text-header”中传递一个JSON对象怎么办?我尝试过了,但它接收到的是[Object Object] - Rishav
显示剩余3条评论

57

$.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) {
                
            }
        });


使用jQuery 1.7.2,C# API 2.x,在尝试从头部提取时HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));会出现错误,因为未找到给定的标题,因为r.Headers为空。 - Jeb50
你可以尝试像这样的代码: string[] ids = System.Web.HttpContext.Current.Request.Headers["logonID"].Split(','); - enthusiast
数据类型应该写成 datatype。 - tree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接