javascript - 多个 HTTP 客户端请求不存储 session 数据

标签 javascript php session appcelerator

我有一个问题,我想知道代码是否可能太快以至于创建单独的 session ID,让我详细说明一下。我有两个独立的 HTTP 客户端,它们依次执行(请参见下面的代码)。我遇到的奇怪问题是在第二个 HTTP 客户端请求中我所做的就是检索一些 session 数据。然而,有时它会很好地返回数据,而有时 session 信息未定义,这会导致无穷无尽的问题。一旦我删除第二个 Http 客户端,问题就不再发生。

一些研究,我认为这可能是异步客户端的问题,我可以在下一个操作中重复使用相同的 Http 客户端变量,并且 session 数据将被保留吗?任何建议或知识将不胜感激。

this.login = function(username, password, loaded, failed, incorrect) {
        var xhr = Ti.Network.createHTTPClient({
            onload : function(e) {
                var response = this.responseText;
                switch(response) {
                case "1":
                    loaded();
                    break;
                case "0":
                    incorrect();
                    break;
                case "2":
                    incorrect();
                    break;
                case "3":
                    incorrect();
                    break;
                default:
                    failed();
                }
            },
            onerror : function(e) {
                failed(e);
            },
            timeout : 5000,
            validatesSecureCertificate : false
        });
        xhr.open('POST', this.url, true);
        xhr.send({
            'action' : 'login',
            'email' : username,
            'password' : password,
        });

        var getdb = Ti.Network.createHTTPClient({
            onload : function(e) {
                var response = this.responseText;
                Ti.App.Properties.setString('name', response);
            },
            onerror : function(e) {
                failed(e);
            },
            timeout : 5000,
            validatesSecureCertificate : false
        });
        getdb.open('POST', this.url, true);
        getdb.send({
            'action' : 'get_name',
            'device' : 'mobile'     
        });

    };

最佳答案

您的问题是您同时执行两个调用。所以执行顺序未知。您需要做的是在第一个完成后调用第二个。为此,您需要在第一个 http 调用的回调中添加第二个 http 调用。

为了使您的代码更有条理,我建议使用函数!使其更具可读性。

function doBothCalls(){
    doFirstCallFunction(function(){
        doSecondCallFunction();
    }
}

然后,doFirstCallFunction 获取一个回调函数,您应该在第一个回调函数进入 http 回调后调用该回调函数。

关于javascript - 多个 HTTP 客户端请求不存储 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877168/

相关文章:

Javascript解析int

javascript - 脚本加载后如何运行函数

javascript - 在 Android 4.4 上获取 Chromium WebView?

php - JS中用xmlhttpRequest请求传递JSON

c# - 包含实现 IDisposable 的项目的 session

javascript - 使用Javascript函数将td的onclick设置为null

javascript - ionic 指令元素在更改时不调用函数(绑定(bind))

php - 如何使用 curl 对 token 进行编码

php - 在 PHP 中比较具有数百万条记录的两列

php - $_Session "complication"登录和注销 php