Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将延迟处理程序附加到函数外部的嵌套AJAX调用_Javascript_Jquery_Ajax_Jquery Deferred - Fatal编程技术网

Javascript 将延迟处理程序附加到函数外部的嵌套AJAX调用

Javascript 将延迟处理程序附加到函数外部的嵌套AJAX调用,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,我正在尝试创建一个名为getApi的AJAX方法扩展,它将自动将我的承载令牌添加到请求头中 我有一个名为getToken的延迟函数,它从sessionStorage或端点(如果令牌已过期)返回令牌 我的扩展方法如下所示: $.getApi = function (options) { getToken() .done(function (token) { options.headers = { Authorizati

我正在尝试创建一个名为getApi的AJAX方法扩展,它将自动将我的承载令牌添加到请求头中

我有一个名为getToken的延迟函数,它从sessionStorage或端点(如果令牌已过期)返回令牌

我的扩展方法如下所示:

$.getApi = function (options) {
    getToken()
        .done(function (token) {
            options.headers = {
                Authorization: token
            };

            $.get(options);
        });
};
$.getApi({
    url: "my endpoint" // Returns json
})
    .done(function (data) {
        // Do stuff with the json data
    });
我希望能够将一个done处理程序附加到内部get请求,如下所示:

$.getApi = function (options) {
    getToken()
        .done(function (token) {
            options.headers = {
                Authorization: token
            };

            $.get(options);
        });
};
$.getApi({
    url: "my endpoint" // Returns json
})
    .done(function (data) {
        // Do stuff with the json data
    });
如何更改getApi扩展方法,以便能够将处理程序附加到内部get请求?有没有更好的方法来实现我的目标?

那么就使用promise界面吧。同时返回$.get,以便扩展承诺链:

$.getApi = function (options) {
    return getToken().then(function (token) {
 // ^^^^^^            ^^^^  
        options.headers = {
            Authorization: token
        };
        return $.get(options);
 //     ^^^^^^
    });
};

$.getApi({
    url: "my endpoint"
}).then(function (data) {
// ^^^^
    // ...etc
});
注意:没有充分的理由在jQuery对象上定义getApi。我建议把它变成一个全局函数:getApi。

return getToken。然后……谢谢,我错过的是then,而不是done。Options是传递到getApi函数的ajax选项。啊,是的,Options就是这样。