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

时间:2014-07-18 02:38:55

标签: ajax extjs request sencha-touch http-status-code-304

我正在向后端制作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 个答案:

答案 0 :(得分:0)

据我所知,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函数。