【问题标题】:How can I spot a 302 response in Sencha Touch Ajax Request如何在 Sencha Touch Ajax 请求中发现 302 响应
【发布时间】: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 何时发生。

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

有什么想法吗?

问候。

【问题讨论】:

    标签: ajax extjs request sencha-touch http-status-code-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 函数将再次调用它的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多