0

是否可以为页面上的所有 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);
        }
    }
});

都是零成功。也许我只是盯着代码太久了,这很明显,但我就是无法调用要调用的函数。

4

1 回答 1

0

您的第三个选项应该可以工作,尽管您需要调用它$(document).ready()

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

但是不推荐使用此选项。你应该使用$.ajaxSend()

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

$(document).ajaxSend(
    function(event, jqXHR) {
        var key = $('#input_apiKey')[0].value; 
        if (key && key.trim() != "") { 
            key = "Bearer " + key;
            jqXHR.setRequestHeader("Authorization", key);
        }
    }
);
于 2015-12-18T21:48:13.813 回答