我正在开发一个登录页面,查看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
超时。
我知道这个问题,但我不知道解决方案。
请帮忙。
答案 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();