在每个ajax.beforeSend()和complete()上添加事件

时间:2014-12-26 10:28:20

标签: jquery ajax version

我需要检查每个 ajax请求中的应用程序版本。 我做了这样的事情:

$(function() {
var version;

$.ajaxSetup({
    beforeSend: function(event, xhr){
        xhr.setRequestHeader('Version', version);
        console.log(version);
    },
    complete: function(xhr) {
        var localVer = xhr.getResponseHeader('Version');

        console.log(localVer);
        if( typeof version === "undefined" ){
            version = localVer;
        } else if( version !== localVer ){

            var r = confirm("Version has been changed.");
            if (r == true) {
                location.reload(true);
            }
        }
    }
  });
});

但是通过调用 ajax.beforeSend 来覆盖此方法,并在我发送请求时完成。 像:

beforeSend: function() {
                loader();
            },

1 个答案:

答案 0 :(得分:0)

beforeSend:不排队。如您所见,特定beforeSend:将覆盖由beforeSend: - fiddle建立的$.ajaxSetup()

您可以这样做:

function setRequestHeader(xhr) {
    xhr.setRequestHeader('Version', version);
    console.log(version);
}

$.ajax({
    beforeSend: function (xhr) {
        setRequestHeader(xhr);
        loader();
    }
});

但这可能很容易做到:

$.ajax({
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Version', version);
        loader();
    }
});

或在您的xhr.setRequestHeader('Version', version)函数中加入loader并允许xhr传递:

function loader (xhr) {
    xhr.setRequestHeader('Version', version);
    ...
}

$.ajax({
    beforeSend: loader
});