【发布时间】:2016-11-24 07:05:03
【问题描述】:
我正在开发一个登录页面,该页面查看 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 在响应之前超时。
我知道问题所在,但我不知道解决方案。
请帮忙。
【问题讨论】:
-
您确定第一个请求正在取消第二个请求吗?我不认为它会这样做。两个请求都将完成。
-
如果两个请求都成功/失败,则两个请求都已完成。但这一次,LDAP 是故意失败的(在我这里没有连接到 LDAP 服务器)。 MySQL 连接成功,几乎立即取消另一个请求,但我的问题是延迟..
-
我认为 `ldap.resolve();` 在
window.href之前会产生问题。通过在 `ldap.resolve();` 之后尝试console.log()来交叉确认这一点,以检查流程是否继续或返回。 -
日志立即出现..
-
尝试返回承诺
return ldap.promise;