【发布时间】:2014-09-08 10:38:02
【问题描述】:
我正在努力成为一个优秀的 jQuery 公民,并接受承诺,但一些基本的用法仍然让我无法理解。
下面的代码是一种面板加载方法,它可能会收到重定向到另一个页面的请求,而不是加载指定的原始页面。重定向受服务器控制(例如,基于以前的用户响应)。
private _loadNewPanel(url: string, data?: any): JQueryPromise<any>
{
var THIS = this;
var dfd = $.Deferred();
var promise = dfd.promise();
$.ajax({
cache: false,
url: url,
type: data ? "POST" : "GET",
data: data
})
.done((html: string, textStatus: string, jqXHR: JQueryXHR) =>
{
var location = jqXHR.getResponseHeader('redirect-url');
// Server says to redirect
if (location)
{
// Chain to the new load request
// **** WHAT TO DO HERE WITH RETURNED PROMISE ***
THIS._loadNewPanel(location, null);
}
else
{
dfd.resolve(html);
}
}).fail((jqXHR, textStatus: string, errorThrown: string) =>
{
dfd.reject(errorThrown + ": " + url);
});
return promise;
}
是不是像这样简单地将.done()添加到递归调用中并传回结果?
// Chain to the new load request
THIS._loadNewPanel(location, null).done(function(html){
dfd.resolve(html);
}).fail(function(error: string){
dfd.reject(error);
});
有没有更流畅的方式来编写整个内容?我在滥用 jQuery 承诺吗?
【问题讨论】:
标签: jquery ajax typescript promise