5

我正在使用特定于用户的数据集构建 Sencha Touch 2 应用程序。

应用架构:

Sencha Touch App <=====> 带有 REST 服务的 Java 服务器后端(许多 AJAX 请求 =))

我实际上拥有的是:

  • 使用用户名/密码登录用户

    应用程序被初始化,登录表单开始发挥作用。将表单作为 AJAX 请求提交后,服务器后端检查用户数据并调用客户端回调函数。

我想做的是:

好的,应该问题不大。

但我怎样才能实现以下目标:

大多数数据是特定于一个用户的,如果需要,应该由 REST 服务返回(通过单击导航,...)。我如何在每个 AJAX 请求中发送 sessiontoken(见上文) - 以便服务器可以提供合适的数据集(假设令牌有效)?

在 AJAX 请求中发送 cookie

我已经读过如果 url 在同一个空间上,cookie 会自动添加到请求中,对吗?Java 服务器位于同一个域 (localhost:8080) 但 cookie 不可用 - 而不是像“app.json”这样的 url 上的请求。我认为跨域请求真的是特定于域的吗?

在 AJAX 请求中发送参数

因为 cookie 不是 avi,所以我考虑了“手动”向 ajax 请求添加参数的可能性。该应用程序将包含许多 AJAX 请求,这就是我不想手动添加令牌的原因 - 我试图覆盖Ext.Ajax的请求功能但我失败了;-(:

(function() {
    var originalRequest = Ext.data.Connection.prototype.request;

    Ext.override(Ext.data.Connection, {
        request : function(options) {
            alert("Do sth... like add params");
            return originalRequest.apply(this, options);
        }
    });
})();

错误:

未捕获的错误:[ERROR][Ext.data.Connection#request] 未指定 URL

我也尝试添加一个监听器

Ext.Ajax.add({
    listeners : {
        beforerequest :  function( conn, options, eOpts ){
           alert("Do sth... like add params");
        }
     }
});

错误:

未捕获的类型错误:对象 [对象对象] 没有方法“添加”

关于如何添加令牌的任何想法?

或者有什么更好的方法来处理这些案件?

谢谢!

4

1 回答 1

9

最后我成功使用了:

function addAjaxInterceptor(context)
{
   Ext.Ajax.on('beforerequest', function(conn, options, eOptions)
   {
      // add the param to options...
   }, context);
}

从应用程序执行 (=> addAjaxInterceptor(this))。

但我认为以下解决方案更适合我的情况:

Ext.Ajax._defaultHeaders = {
    // params as json
};

(因为 Ext.Ajax 是一个单例对象,我不会更改每个请求的参数)

于 2012-08-20T11:28:30.617 回答