当 extjs 中有代理 ajax 调用时,如何从响应中获取内容类型?

Posted

技术标签:

【中文标题】当 extjs 中有代理 ajax 调用时,如何从响应中获取内容类型?【英文标题】:How can I get content type from response when there is a proxy ajax call in extjs? 【发布时间】:2020-09-06 09:31:42 【问题描述】:

在下面的代码中,我对服务器进行了代理 ajax 调用。当会话处于活动状态时,我会收到预期的 json 格式,但当会话处于非活动状态时,我会收到一个 html 文件作为响应。

Ext.define('ExtDashboard.model.data', 
    extend: 'Ext.data.Model',
    fields: [],
    proxy: 
        type: 'ajax',
        url : 'users.json',
        reader: 
            type: 'json',
            rootProperty: 'root',
            success : 'success',
            transform: function(data) 
                   //perform operations on data
                   return data;   
                
            
        
    );

响应 html 将包含一些将会话显示为非活动状态的文本。因此,我从 html 中读取了字符串并执行了进一步的操作,例如重定向到登录页面。但我不确定如何在这里获取响应并提取内容类型,尤其是当收到的响应是 html 而不是 json 时

【问题讨论】:

【参考方案1】:

恕我直言,最好检查代理的exception 事件处理程序中的http response status code。像这样的:

proxy: 
    type: 'ajax',
    url: '/data.json',
    reader: 
        type: 'json',
        rootProperty: 'data'
    ,
    listeners: 
        exception: function (proxy, response, operation) 
            // 401 - Unauthorized
            // 440 - Login Time-out
            
            if([401, 440].indexOf(response.status) > -1) 
                // Do something i.e. redirect to login page.
            ;
        

    

【讨论】:

以上是关于当 extjs 中有代理 ajax 调用时,如何从响应中获取内容类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ExtJs 中的函数调用函数

如何在 extjs 3.4 中为 ajax 调用处理 windows auth 握手(401)?

ExtJs 多个 Ajax 调用

ExtJS Ajax POST 与代理 POST

ExtJS 4 - 如何禁用特定行中的复选框

选择性地中止通过 Extjs Direct 代理发送的 ajax 请求