我登录到我的网站(在本地主机上运行),并将用户 ID 存储在 session 变量中
$_SESSION['user_id'] = $user_id;
主页已加载,一切正常。我在主页上显示了用户 ID,所以我确信它的值(value)。当我加载另一个页面时,使用
php = 'some_php_file.php';
window.open(php,php);
第二页打开正常。但是,如果我尝试再次打开同一页面,单击主页上的同一按钮,系统将注销。如果我省略 window.open() 中的第二个 php
(使用 '' 代替),我可能有同一个窗口的多个副本(我不想要的),但没有自动注销的问题.
知道会发生什么吗?
编辑:如果我关闭第二个窗口并重复该过程,则不会出现注销问题。我可以根据需要多次关闭并重新打开第二个窗口。仅当我尝试打开第二个窗口但它已经打开时才会出现此问题。我还可以打开不同的“第二个窗口”(不同的 php 文件)。只有当我尝试打开同一窗口两次时,我才会被注销。
编辑2:看来我已经找到了。在调用 window.open() 之前,我使用以下函数测试 php 文件是否存在:
function fileExists(url){
var http = new XMLHttpRequest();
http.open('HEAD',url,true);
http.send();
return http.status != 404;
}
如果我将 http.open() 行更改为
http.open('HEAD',url,false);
它有效!但是manual告诉我们在第三个参数中使用“true”...我该怎么办?
最佳答案
在我看来,您的 fileExists
函数只是始终返回 true
,因为它不会等待 XHR 完成。除非您指定 async = false
。
是时候阅读How to return the response from an asynchronous call?了可能吧。
我不知道这总是正确的结果是什么,因为你没有确切地分享你对这个结果所做的事情。
现在,如果您想“坚持使用手册”并保持 async = true
(您确实应该这么做),那么只需将以下代码包装在回调中即可。例如:
function fileExistsAsync(url, callback){
var http = new XMLHttpRequest();
http.open('HEAD',url,true);
http.send();
http.onreadystatechange = function () {
if (http.readyState === 4) {
callback(http.status != 404);
}
}
}
fileExistsAsync(url, function (exists) {
console.log("async " + exists);
});
关于javascript - 为什么我的系统会自动退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33738068/