如何在 Sencha Touch Ajax 请求中发现 302 响应

Posted

技术标签:

【中文标题】如何在 Sencha Touch Ajax 请求中发现 302 响应【英文标题】:How can I spot a 302 response in Sencha Touch Ajax Request 【发布时间】:2014-07-18 02:38:54 【问题描述】:

我正在向我无法控制的后端发出 Ajax.request。

这个请求有时会将我重定向到登录页面,我的 response.status 是 200 而不是 302。到目前为止我已经尝试过这个:

    Ext.Ajax.on("requestexception", function(conn, response, options, eOpts)
        console.log(conn);
        console.log(response);
        console.log(options);
        console.log(eOpts);
    );

    Ext.Ajax.request(
        url : 'someUrl'
        params : params

    );

显然这种重定向不是我所期望的,所以我需要发现 304 何时发生。

大多数情况下都有某种解决方法。

有什么想法吗?

问候。

【问题讨论】:

【参考方案1】:

据我所知,http 重定向完全由浏览器处理。因此,如果您无权访问后端,则无法检测到重定向。

当您被重定向到登录页面时,您的会话似乎已过期,您需要再次进行身份验证。

您可以创建一个函数,在实际响应中检测到登录页面后立即发送登录信息。

sendLogin: function ( params, successCallback, failureCallback, scope ) 
    Ext.Ajax.request(
        url: "loginurl",
        params: params,
        success: function ( response, options ) 
            successCallback.call( scope || this, response, options );
        ,
        failure: function ( response, options ) 
            failureCallback.call( scope || this, response, options );
        
    );


doRequest: function ( params, successCalback, failureCallback, scope ) 
    var me = this;
    Ext.Ajax.request(
        url: "someurl",
        success: function ( response, options ) 
            if ( isLoginPage( response ) ) 
                this.sendLogin(
                        loginParams, 
                        function ( successResponse, successOptions ) 
                            me.doRequest( params, successCallback, failureCallback, scope );
                        ,
                        function ( failureResponse, failureOptions ) 
                            failureCallback.call( scope || this, failureResponse, failureOptions );
                        ,
                        me
                    );
             else 
                successCallback.call( scope || this, response, options );
            
        ,
        failure: function ( response, options ) 
            failureCallback.call ( scope || this, response, options );
        
    );

使用doRequset 发送您的实际请求。成功案例检查响应是否为登录页面。如果是,它会发送登录请求。当登录请求成功时,doRequest 函数将再次调用它的参数。

【讨论】:

以上是关于如何在 Sencha Touch Ajax 请求中发现 302 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何将ajax请求放入sencha touch中的变量中?

在 Sencha Touch 2 中更改选项卡时发出 Ajax 请求

如何通过 ajax 在 javascript 中使用个人 http 标头加载图像(sencha touch 2)

Sencha touch2:对 Json 数据进行 Ajax 发布请求

Sencha Touch 2.0 进度指示器

Sencha Touch 中的 POST 请求