angular $http / jquery 完全等效

Posted

技术标签:

【中文标题】angular $http / jquery 完全等效【英文标题】:angular $http / jquery complete equivalent 【发布时间】:2013-08-11 05:44:49 【问题描述】:

有没有办法用 Angular $http 模块模拟 jquery 的“完成”回调?无论请求成功还是失败,我都有一些我想执行的代码,目前我发现自己不得不写这个:

$http.get(someUrl).success(function()
        successCode();
        completeCode();
    ).error(function()
        errorCode();
        completeCode();
    )

但我宁愿写这样的东西:

$http.get(someUrl).success(function()
        successCode();
    ).error(function()
        errorCode();
    ).complete(function()
        completeCode();
    )

我也尝试过使用 promise API,但最终遇到了同样的问题。有什么建议吗?

【问题讨论】:

【参考方案1】:

2014 年 8 月更新: .always 在最新版本的 Angular 中已重命名为 .finally。更喜欢.finally 而不是.always

请注意,为了支持 IE8,您必须使用括号表示法将其称为 ["finally"]


你可以在 AngularJS 中使用.always

这个变化是相当新的(你可以在jQuery中做一段时间),你可以看到提交here。这要求您拥有 AngularJS 1.1.5 或更高版本。

always(callback) - 允许您观察承诺的履行或拒绝, 但是这样做而不修改最终值。这对于释放资源或做一些事情很有用 无论承诺被拒绝还是解决,都需要进行清理。请参阅full specification 更多信息。

Fiddle

【讨论】:

您应该提到它在 1.1.5 及更高版本中。 @Reno 请检查您使用的是哪个版本的 Angular 以及我添加到答案中的小提琴。 它似乎不适用于当前的角度 v1.2.15。看起来总是不存在了,我收到一个错误。有什么办法解决这个问题? 注意:angular documentation 包含以下附带条件,“因为 finally 是 javascript 中的保留字,ES3 不支持保留关键​​字作为属性名称,所以您需要调用类似 promise 的方法['finally'](回调)使您的代码兼容 IE8 和 android 2.x。” @dumbledad 这不是抄袭,因为您提供了署名 - 抄袭是指您声称内容是您自己的。明确允许在 SO 中引用和使用其他带有归属的答案 - 这就是内容许可(滚动到每一页的最底部 - 它总是在那里)。所以总结一下 - 是的,你所做的一切都很好,你不必在未来征求许可或通知我。

以上是关于angular $http / jquery 完全等效的主要内容,如果未能解决你的问题,请参考以下文章

从 jquery $.ajax 到 angular $http

Angular 1.3 和最低要求的 JQuery 版本

Angular $http 返回“no access control allow origin”标头,但 jQuery $.get 请求返回信息

Angular 的 $http.post 不起作用,它的 $http... 也不起作用,但 jQuerys ajax 起作用。为啥?

Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?

Angular 与 jQuery 两者的适用性