首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ext.data.Connection.override请求

Ext.data.Connection.override请求
EN

Stack Overflow用户
提问于 2018-01-13 04:09:16
回答 2查看 743关注 0票数 0

我试图在发送之前拦截来自Extjs应用程序的所有请求,POST和GET,然后操作网址并添加一个新的头,授权:持有者XYZ123。

我有这样的代码:

代码语言:javascript
运行
复制
Ext.data.Connection.override({

    request: function (options) {
        var me = this;

        this.cors = true;
        this.useDefaultHeader = false;
        this.useDefaultXhrHeader = false;

        options.headers = { "Authorization": "Bearer VAROIS1iOiJKV1QiLCJh" };

        var separator = options.url.indexOf('/') == 0 ? "" : "/";
        options.url = UrlAPIPrefix + separator + options.url;

        return me.callOverridden(arguments);
    }
});

但是当我尝试使用它时,头部Authorization在GET和POST两种情况下都没有发送。使用POST时不发送参数。如果将代码调试到Extjs文件中,我可以看到参数,但在chrome请求头上看不到它,请参见图片。

如果有人知道如何在一个地方做这件事,如果你能帮助我,我将很高兴。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-13 17:16:06

这是因为Ext.Ajax - Ext.data.Connection的单例-用于框架中的大多数请求,覆盖后者不会影响前者。这种覆盖行为在extjs 5中进行了更改,并且是Sencha所设计的。

取而代之的是你需要的:

代码语言:javascript
运行
复制
Ext.Ajax.setWithCredentials(true);
Ext.Ajax.on({
    beforerequest: function(conn, options) {
        options.headers = options.headers || {};
        options.headers['Authorization'] = 'Bearer VAROIS1iOiJKV1QiLCJh';
    },
    requestexception: function(conn, response, options) {
        Ext.Error.raise('...');
    }
});

并且不要将令牌硬编码到您的javascript中!

票数 2
EN

Stack Overflow用户

发布于 2018-01-13 04:20:34

我没有覆盖这个类,而是创建了一个bootstrap类来设置ajax拦截器。在Application.launch()方法中调用Bootstrap.init()。

代码语言:javascript
运行
复制
Ext.define('MyApp.Bootstrap', {

    singleton : true,

    init: function() {
        Ext.Ajax.on({
            beforerequest: function(conn, opts){
                if(opts.url && Ext.String.startsWith(opts.url, '/')) {
                    return;
                }
                if(opts.url && !Ext.String.startsWith(opts.url, MyApp.Config.SERVER_CONTEXT)) {
                    opts.url = MyApp.Config.SERVER_CONTEXT + opts.url;
                }
                var clientId = MyApp.getApplication().clientId;
                opts.headers = Ext.apply({'X-Client-Id': clientId}, opts.headers);
                Ext.log('Sending Request to : ', opts.url);
            }
        });
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48233340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档