首页 文章

使用jQuery在AJAX请求中添加标头

提问于
浏览
318

我想从jQuery向AJAX POST请求添加自定义标头 .

我试过这个:

$.ajax({
    type: 'POST',
    url: url,
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    //OR
    //beforeSend: function(xhr) { 
    //  xhr.setRequestHeader("My-First-Header", "first value"); 
    //  xhr.setRequestHeader("My-Second-Header", "second value"); 
    //}
}).done(function(data) { 
    alert(data);
});

当我发送此请求并使用FireBug观看时,我看到此 Headers :

选项xxxx / yyyy HTTP / 1.1主机:127.0.0.1:6666 User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:11.0)Gecko / 20100101 Firefox / 11.0接受:text / html,application / xhtml xml, application / xml; q = 0.9,/; q = 0.8 Accept-Language:fr,fr-fr; q = 0.8,en-us; q = 0.5,en; q = 0.3 Accept-Encoding:gzip,deflate Connection:keep -alive Origin:null Access-Control-Request-Method:POST Access-Control-Request-Headers:my-first-header,my-second-header Pragma:no-cache Cache-Control:no-cache

为什么我的自定义 Headers 转到 Access-Control-Request-Headers

Access-Control-Request-Headers:my-first-header,my-second-header

我期待像这样的标头值:

My-First-Header:第一个值My-Second-Header:第二个值

可能吗?

5 回答

  • 111

    以下代码适用于我 . 我总是只使用单引号,它工作正常 . 我建议你应该只使用单引号或仅使用双引号,但不能混淆 .

    $.ajax({
        url: 'YourRestEndPoint',
        headers: {
            'Authorization':'Basic xxxxxxxxxxxxx',
            'X_CSRF_TOKEN':'xxxxxxxxxxxxxxxxxxxx',
            'Content-Type':'application/json'
        },
        method: 'POST',
        dataType: 'json',
        data: YourData,
        success: function(data){
          console.log('succes: '+data);
        }
      });
    

    希望这能回答你的问题......

    Laravel 5.6的更新:

    在最新版本的Laravel中(至少来自Laravel 5.6及以上版本),它不是X_CSRF_TOKEN而是 X-CSRF-TOKEN .

    希望这澄清一下 .

  • -8

    这就是为什么你只能订购遵循大多数浏览器遵循的 CORS 政策的浏览器,将随机请求发送到其他来源并让你简单地获得响应!

    此外,如果您尝试从浏览器附带的开发人员工具手动编辑某些请求标头(如 origin-header ),浏览器将拒绝您的编辑,并可能会发送预检 OPTIONS 请求 .

  • 110

    以下是如何在JQuery Ajax调用中设置请求标头的示例:

    $.ajax({
      type: "POST",
      beforeSend: function(request) {
        request.setRequestHeader("Authority", authorizationToken);
      },
      url: "entities",
      data: "json=" + escape(JSON.stringify(createRequestObject)),
      processData: false,
      success: function(msg) {
        $("#results").append("The result =" + StringifyPretty(msg));
      }
    });
    
  • 376

    尝试使用rack-cors gem . 并在ajax调用中添加标头字段 .

  • 1

    你在Firefox中看到的不是实际的要求;请注意,HTTP方法是OPTIONS,而不是POST . 这实际上是浏览器确定是否应允许跨域AJAX请求的“飞行前”请求:

    http://www.w3.org/TR/cors/

    飞行前请求中的Access-Control-Request-Headers标头包括实际请求中的标头列表 . 然后,在浏览器提交实际请求之前,服务器将报告是否在此上下文中支持这些标头 .

相关问题