Javascript 值更改后的函数调用
我正在尝试获取一个注销按钮,该按钮首先取消会话,然后关闭实际选项卡。Javascript 值更改后的函数调用,javascript,php,html,function,hidden-field,Javascript,Php,Html,Function,Hidden Field,我正在尝试获取一个注销按钮,该按钮首先取消会话,然后关闭实际选项卡。 到目前为止,我只得到了会话销毁的部分,我不知道如何完成选项卡关闭。 我尝试在会话被破坏后使用setInterval回显该函数,但没有成功完成。有人知道一些提普吗?谢谢 编辑:所有代码都在同一页上 这是我的密码: [HTML] <input type="hidden" name="vLogout" value="false"> <input type="button" value="Logout" name="
到目前为止,我只得到了会话销毁的部分,我不知道如何完成选项卡关闭。
我尝试在会话被破坏后使用setInterval回显该函数,但没有成功完成。有人知道一些提普吗?谢谢
编辑:所有代码都在同一页上 这是我的密码: [HTML]
<input type="hidden" name="vLogout" value="false">
<input type="button" value="Logout" name="Logging out" onClick="logout(this.form)" style="background-color:#cc0000;color:#ffffff">
使用session_start();在页面顶部,而不是在任何函数中
而不是onClick=“logout(this.form)”到onClick=“logout(document.form)”
使用输入类型=提交。不是“按钮”,而是在$\u请求的位置[“vLogout”]使用if(isset($_POST[“vLogout”])或if(isset($_GET[“vLogout”])) 您实际提交的表单会导致请求一个新文档,即当php脚本完成并输出时
closeTab()代码>已传输到客户端,不再有功能closeTab
。
也不能保证javascript代码可以关闭该特定窗口,因此我建议让php脚本打印出一个完整的html文档,该文档尝试关闭窗口/选项卡,但也会为用户显示一些信息,以防脚本失败。您可以尝试在注销(f)函数中添加这一行
f.dataType = 'script';
注销功能应为:
function logout(f)
{
var confirmed = confirm("Are you sure you want to logout?");
if (confirmed){
f.method="post";
f.dataType = 'script'; //this line should be added
f.vLogout.value = true;
f.submit();
}
}
在php代码中,编写不带脚本标记的脚本:
echo "closeTab();";
它应该可以工作。注意:很可能,由于安全问题,您无法使用JS关闭选项卡。您只能用JS关闭一个选项卡,而不是用JS打开的选项卡
您可以使用JQuery。不要提交表格。使用onclick事件向服务器发送Ajax请求。当Ajax请求的数据类型为“脚本”时,浏览器将以JS的形式执行响应体
注意:将文件(index.php和logout.php)保存在同一目录中
在index.html中:
<html>
<head>
<title>Ajax Logout</title>
<style>
.logout-button {
background:#00aaee;
display:inline-block;
padding: 5px 10px;
cursor: pointer;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
<div class="logout-button">logout</div>
<script type="text/javascript">
function closeTab(){
confirm("test");
//your code here
}
$('.logout-button').on('click', function(){
$.ajax({
url: ('logout.php'),
type: 'POST',
dataType: 'script'
});
});
</script>
</body>
</html>
Ajax注销
.注销按钮{
背景:#00aaee;
显示:内联块;
填充物:5px10px;
光标:指针;
}
注销
函数closeTab(){
确认(“测试”);
//你的代码在这里
}
$('.logout按钮')。在('click',function()上{
$.ajax({
url:('logout.php'),
键入:“POST”,
数据类型:“脚本”
});
});
在logout.php中:
<?php
session_start();
session_unset();
session_destroy();
echo "closeTab();";
?>
当任何输出发送到浏览器(如格式良好的HTML)后,您不能调用会话_start()
——您永远不应该像那样输出Javascript代码,因为它不可能在代码中应该出现的位置。如果所有内容都在同一个页面中,请设置一个变量标志,例如,$closeWindow=true
,然后在生成正确的页面标记结构后检查该标志,然后可以调用函数。请尝试将onClick=“logout(this.form)”
更改为onClick=“logout(document.form)”
@scrowler非常感谢,这就是我需要的技巧!让它像我想的那样工作。:)不起作用,一开始只是echo的“closeTab();”:(谢谢,现在移动了一些东西,它的工作方式与我尝试的一样-更简单,占用空间更少。:)
echo "closeTab();";
<html>
<head>
<title>Ajax Logout</title>
<style>
.logout-button {
background:#00aaee;
display:inline-block;
padding: 5px 10px;
cursor: pointer;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
<div class="logout-button">logout</div>
<script type="text/javascript">
function closeTab(){
confirm("test");
//your code here
}
$('.logout-button').on('click', function(){
$.ajax({
url: ('logout.php'),
type: 'POST',
dataType: 'script'
});
});
</script>
</body>
</html>
<?php
session_start();
session_unset();
session_destroy();
echo "closeTab();";
?>