取消对PHP页面的请求导致另一个PHP页面延迟响应

时间:2016-11-24 07:05:03

标签: php ldap

我正在开发一个登录页面,查看LDAP和MySQL数据库以进行用户身份验证。想法是同时请求两个PHP页面,任何一个完整的请求将取消另一个请求。

这是我的代码:

$scope.submitForm = function(username, password) {
    var ldap = $q.defer();
    var userTable = $q.defer();

    $http({
            timeout: userTable.promise,
            method: 'POST',
            url: 'crud/00loginUserTable.php',
            data: {
                username: username,
                password: password
            }
        })
        .then(function(response) {
            if (response.data.message != "ok")
                alert("Tak OK");
            else {
                sessionStorage.jwt = response.data.jwt;
                ldap.resolve();
                window.location.href = "index.php";
            }
        });

    $http({
            timeout: ldap.promise,
            method: 'POST',
            url: 'crud/00loginLDAP.php',
            data: {
                username: username,
                password: password
            }
        })
        .then(function(response) {
            if (response.data.message != "ok")
                alert("Tak OK");
            else {
                sessionStorage.jwt = response.data.jwt;
                userTable.resolve();
                window.location.href = "index.php";
            }
        });
};

此代码实际上有效。但是...

window.location.href = "index.php";执行之前有1.3分钟的延迟。正如我发现的那样,它与PHP有关。我尝试将window.location.href = "index.php";更改为window.location.href = "index.html";。中提琴!没有延迟。所以似乎index.php在响应之前等待00loginLDAP.php超时。

我知道这个问题,但我不知道解决方案。

请帮忙。

2 个答案:

答案 0 :(得分:0)

$scope.submitForm().then(function(data){
   console.log(data);
   window.location.href = "index.php";
});

$scope.submitForm = function(username, password) {
    var ldap = $q.defer();
    var userTable = $q.defer();

    $http({
            timeout: userTable.promise,
            method: 'POST',
            url: 'crud/00loginUserTable.php',
            data: {
                username: username,
                password: password
            }
        })
        .then(function(response) {
            if (response.data.message != "ok")
                alert("Tak OK");
            else {
                sessionStorage.jwt = response.data.jwt;
                ldap.resolve('DataTable Response');
                return ldap.promise;
            }
        });

    $http({
            timeout: ldap.promise,
            method: 'POST',
            url: 'crud/00loginLDAP.php',
            data: {
                username: username,
                password: password
            }
        })
        .then(function(response) {
            if (response.data.message != "ok")
                alert("Tak OK");
            else {
                sessionStorage.jwt = response.data.jwt;
                userTable.resolve('LDAP response');
                return userTable.promise;
            }
        });
};

使用此..在ldap.resolve('DataTable Response');内传递resolve()数据是可选的。如果你想传递一些消息然后使用。

答案 1 :(得分:0)

当我学习here时,仅取消$ http请求不会停止PHP执行。其他PHP页面等到第一个PHP页面完成的原因,因为它们都使用session_start();

我引用:

  

此外,如果您正在使用PHP会话,那么它们是另一个棘手的问题   情况。例如,如果您正在进行AJAX,并且实际上是在发送   两个AJAX请求PHP脚本和PHP脚本需要   与session_start()的会话。第一个AJAX查询将正常工作,   但是第二个必须等到第一个电话   完成,因为第一个脚本已锁定会话。该   第一个脚本最终可能会过早地释放会话   session_write_close();

相关问题