在每个AJAX请求中发送用户详细信息(会话令牌)(Sencha Touch 2)

str*_*ire 5 javascript extjs sencha-touch-2

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

应用程序架构:

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

我实际拥有的是:

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

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

我想做的是:

好的,不应该是问题.

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

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

在AJAX请求中发送cookie

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

在AJAX请求中发送参数

因为cookie不是我想到的"手动"向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);
        }
    });
})();
Run Code Online (Sandbox Code Playgroud)

错误:

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

我还尝试添加一个监听器

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

错误:

未捕获的TypeError:对象[object Object]没有方法'add'

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

还是处理这些案件的更好方法?

谢谢!

str*_*ire 9

最后我成功使用了:

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

从app(=> addAjaxInterceptor(this))执行.

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

Ext.Ajax._defaultHeaders = {
    // params as json
};
Run Code Online (Sandbox Code Playgroud)

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