将延迟处理程序附加到嵌套的 AJAX 调用外部函数
Attach deferred handlers to nested AJAX call outside function
我正在尝试创建一个名为 getApi 的 AJAX 方法扩展,它会自动将我的不记名令牌添加到请求 header。
我有一个名为 getToken()
的延迟函数,它 returns 来自 sessionStorage 或端点的令牌(如果它已过期)。
我的扩展方法是这样的:
$.getApi = function (options) {
getToken()
.done(function (token) {
options.headers = {
Authorization: token
};
$.get(options);
});
};
我希望能够将 done() 处理程序附加到内部 get 请求,如下所示:
$.getApi({
url: "my endpoint" // Returns json
})
.done(function (data) {
// Do stuff with the json data
});
如何更改我的 getApi 扩展方法以便能够将处理程序附加到内部获取请求?有没有更好的方法来实现我想要做的事情?
使用承诺接口 (then
)。另外 return $.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
.
我正在尝试创建一个名为 getApi 的 AJAX 方法扩展,它会自动将我的不记名令牌添加到请求 header。
我有一个名为 getToken()
的延迟函数,它 returns 来自 sessionStorage 或端点的令牌(如果它已过期)。
我的扩展方法是这样的:
$.getApi = function (options) {
getToken()
.done(function (token) {
options.headers = {
Authorization: token
};
$.get(options);
});
};
我希望能够将 done() 处理程序附加到内部 get 请求,如下所示:
$.getApi({
url: "my endpoint" // Returns json
})
.done(function (data) {
// Do stuff with the json data
});
如何更改我的 getApi 扩展方法以便能够将处理程序附加到内部获取请求?有没有更好的方法来实现我想要做的事情?
使用承诺接口 (then
)。另外 return $.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
.