小编cip*_*pak的帖子

重试jquery ajax请求,该请求附加了延迟的回调

我正在尝试实现一个重试ajax请求的系统,这些请求因临时原因而失败.在我的例子中,它是关于在调用刷新web服务以恢复会话之后重试因401会议状态代码而失败的请求,因为会话已过期.

问题是成功重试时不会调用"done"回调,这与调用的"success"ajax选项回调不同.我在下面编写了一个简单的例子:

$.ajaxSetup({statusCode: {
    404: function() {
        this.url = '/existent_url';
        $.ajax(this);
    }
}});

$.ajax({
    url: '/inexistent_url',
    success: function() { alert('success'); }
})
.done(function() {
    alert('done');
});
Run Code Online (Sandbox Code Playgroud)

是否有办法在成功重试时调用完成式回调?我知道延期不能被"拒绝"后"解决",是否有可能阻止拒绝?或者可能将原始延迟的doneList复制到新的延迟?我没有想法:)

下面是一个更现实的例子,我试图排队所有401拒绝的请求,并在成功调用/ refresh后重试它们.

var refreshRequest = null,
    waitingRequests = null;

var expiredTokenHandler = function(xhr, textStatus, errorThrown) {

    //only the first rejected request will fire up the /refresh call
    if(!refreshRequest) {
        waitingRequests = $.Deferred();
        refreshRequest = $.ajax({
            url: '/refresh',
            success: function(data) {
                // session refreshed, good
                refreshRequest = null;
                waitingRequests.resolve();
            },
            error: function(data) {
                // …
Run Code Online (Sandbox Code Playgroud)

ajax jquery jquery-deferred

37
推荐指数
4
解决办法
2万
查看次数

AngularJS标准指令优先级列表

我正在寻找一个标准的angularjs指令列表及其优先级(尤其是非零指令).每当你想要创建一个特殊的指令时,看看它会很有帮助,例如,一个terminal: true用于查看它最适合的位置,以及更好地理解角度设计者如何使用它们的指令.

我知道每个指令都在其文档页面中指定了它的优先级,但这对于编译/链接顺序没有任何帮助,因为像下面的列表那样:

Directive  - Prio
-----------------
ng-repeat  - 1000
ng-if      -  600
ng-include -  400
...

谢谢.

angularjs angularjs-directive

10
推荐指数
1
解决办法
2018
查看次数

如何使用javascript获取“固定”定位元素的包含块?

假设我们有以下设置:

#header {
    background-color: #ddd;
    padding: 2rem;
}
#containing-block {
    background-color: #eef;
    padding: 2rem;
    height: 70px;
    transform: translate(0, 0);
}
#button {
    position: fixed;
    top: 50px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="header">header</div>
<div id="containing-block">
    containing-block
    <div>
      <div>
        <div>
          <button id="button" onclick="console.log('offsetParent', this.offsetParent)">click me</button>
        </div>
      </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

按钮具有fixed位置并且包含块具有transform适当的属性。

这可能会让人感到意外,但按钮是相对于#containing-block而非视口定位的(正如人们在使用 时所期望的那样fixed)。那是因为该#containing-block元素具有transform属性集。有关说明,请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/position#fixed

有没有一种简单的方法可以找出按钮的包含块?top: 50px相对于哪个元素进行计算?假设您没有对包含块的引用,并且您不知道它有多少级。如果没有设置transform,perspectivefilter属性的祖先,它甚至可能是 documentElement 。

对于absoluterelative定位元素,我们有elem.offsetParent它给我们这个参考。但是,对于 …

javascript css-position

10
推荐指数
1
解决办法
387
查看次数

AngularJS:如何获取指令的未编译转换内容

我正在尝试使用指令的transclude内容(指令的原始内容,而不是模板)作为网格中行的HTML模板.

<grid attrs="...">
    <action-column-template>...(html I need)...</action-column-template>
</grid>
Run Code Online (Sandbox Code Playgroud)

我的想法是我需要action-column-template的原始HTML(未编译,未绑定到任何范围).

我不控制每一行的生成,因此我无法使用transclude(rowScope)手动将该操作模板绑定到每一行的范围.我只需要它作为普通的html(即"{{}}"和内部指令未被触及).

从链接函数运行transclude()fn可以获得已转换的内容,但绑定到范围并扩展了内部指令.并且编译函​​数的tElem参数的html()返回指令模板的HTML,而不是要转换的内容.

所以问题是:我可以将编译,控制器,preLink或postLink函数中的指令内容转换为未编译的HTML吗?

谢谢.

angularjs angularjs-directive angularjs-ng-transclude

6
推荐指数
1
解决办法
804
查看次数