拦截道场xhr呼叫

时间:2013-10-17 23:21:54

标签: dojo xmlhttprequest intercept

关于这个问题,How do I fully intercept AND requeue http requests using dojo

我对类似的东西很感兴趣,dojo / aspect更适合吗?

查看此处的文档,http://dojotoolkit.org/reference-guide/1.9/dojo/aspect.html给出的示例显示了如何拦截dojo.xhr,但dojo.xhr自1.8 ??以来已弃用。并由dojo / request取代。对于新API,dojo文档建议使用dojo / request / notify。

我很困惑使用哪一个或我应该使用这两种方法?所以我可以涵盖一些遗留代码仍在使用旧的dojo.xhr API的所有情况。

我可以想到使用这两种方法的另一个复杂因素,可能是两个方法都被调用相同的xhr请求,从而重复了工作。

1 个答案:

答案 0 :(得分:1)

dojo.xhr已弃用,而dojo/request/xhrdocumentation for which you can find here

您仍然可以在示例中使用dojo/aspect。我created a fiddle that does just that。相关代码如下。

require([
    'dojo/request/xhr',
    'dojo/aspect'
], function(xhr, aspect) {
    aspect.before(xhr, 'post', function() {
        console.log('before POST');
    });

    // use xhr.post here...
});

如果您仍希望涵盖使用dojo.xhr的旧代码,则可以在aspect中提取您使用的函数并将其传递给两个对象:

function beforeXhr() {
    // ...
}

aspect.before(dojo, 'xhr', beforeXhr);
aspect.before(xhr, 'post', beforeXhr);

我还没有想出如何在返回dojo/aspect回调的函数上使用require,这意味着您必须重复aspect次'GET'调用,'PUT','DELETE'等等。如果有人知道如何在这个例子中使用aspect函数对象,我很想知道。