如何捕获任何ajax调用的beforeSend事件?

时间:2015-12-18 21:28:40

标签: jquery ajax swagger swashbuckle

是否可以在页面上捕获所有ajax调用的$ .ajax beforeSend事件,无论它在何处启动?

具体来说,我使用Swagger UI / Swashbuckle并且无法直接修改页面上的JS代码,但可以使用SwaggerConfig.cs中的.EnableSwaggerUI调用中的InjectJavaScript调用来注入一些脚本。 swagger数据超出了我的控制范围,并且未正确形成以显示oauth设置,因此我需要允许用户输入API密钥并将其放在标题中。

我尝试了多次迭代,包括:

$(document).on("ajaxStart", function (jqXHR) {
    var key = $('#input_apiKey')[0].value;

    if (key && key.trim() != "") {
        key = "Bearer " + key;
        jqXHR.setRequestHeader("Authorization", key);
    }
});

$(document).on("beforeSend", function (jqXHR) {
    var key = $('#input_apiKey')[0].value;

    if (key && key.trim() != "") {
        key = "Bearer " + key;
        jqXHR.setRequestHeader("Authorization", key);
    }
});

$.ajaxSetup({
    beforeSend: function (jqXHR, settings) {
        var key = $('#input_apiKey')[0].value;

        if (key && key.trim() != "") {
            key = "Bearer " + key;
            jqXHR.setRequestHeader("Authorization", key);
        }
    }
});

一切都没有成功。也许我只是盯着代码太久而且显而易见,但我无法获得要调用的函数。

1 个答案:

答案 0 :(得分:0)

您的第三个选项应该有效,但您需要在$(document).ready()中调用它:

$(function(){ 
    $.ajaxSetup({ 
        beforeSend: function(jqXHR) { ... }
     });
});

但不建议使用此选项。你应该使用https://security.stackexchange.com/questions/37409/certificate-chain-checking

编辑:好的,然后尝试ajaxSend,以防onSend被覆盖:

$(document).ajaxSend(
    function(event, jqXHR) {
        var key = $('#input_apiKey')[0].value; 
        if (key && key.trim() != "") { 
            key = "Bearer " + key;
            jqXHR.setRequestHeader("Authorization", key);
        }
    }
);