为每个请求添加标头并重定向

时间:2016-11-16 00:03:11

标签: jquery ajax

我使用jquery。

当用户登录时,我希望在标题中有授权信息。

似乎在我们进行重定向时,在我们进行ajax调用后,标题不再存在

任何原因?

我的代码

$('#loginform').submit(function(event) {

  event.preventDefault();
  var header = btoa($('#username').val() + ":" + $('#password').val());

  $.ajaxSetup({
    headers: {
        "Authorization": "Basic " + header
    }
  });


  $.ajax({
    timeout: 1000, //check if really needed
    type: 'get',
    url: '/rest/members/1',
    headers: {
        "Authorization": "Basic " + header
    }

  }).done(function(data, textStatus, jqXHR) {

    $("#error-login-form").addClass("hidden");
    var deferredUsername = getNameByUsername();

    $.when(deferredUsername).then(function() {
        window.location = "main.html";
    });

  }).fail(function(jqXHR, textStatus) {

    if (jqXHR.status == 401) {
        $("#error-login-form").removeClass("hidden");
    }
  });
});

2 个答案:

答案 0 :(得分:0)

使用jQuery,您可以在beforeSend中使用它。像

这样的东西
                        beforeSend: function (xhr) {
                        var authorizationCode = $.base64('encode', 'userName' + ":" + 'password');
                        xhr.setRequestHeader ("Authorization", "Basic " +authorizationCode);
                        xhr.setRequestHeader ("Content-Type", "application/json;charset=utf-8");

                    }

根据beforeSend的jQuery文档

  

一个预请求回调函数,可用于在发送之前修改jqXHR(在jQuery 1.4.x,XMLHTTPRequest)对象中。使用它来设置自定义标题等.jqXHR和设置对象作为参数传递。这是一个Ajax事件。在beforeSend函数中返回false将取消请求。从jQuery 1.5开始,无论请求的类型如何,都将调用beforeSend选项。

答案 1 :(得分:0)

 var header = btoa($('#username').val() + ":" + $('#password').val());
 $.cookie('cookie_authorization', header);

并为你所有的ajax调用,添加

headers: {
        "Authorization": "Basic " + $.cookie('cookie_authorization')
}