值更改后的函数调用

时间:2014-02-17 10:29:05

标签: javascript php html function hidden-field

我试图获取一个Logout按钮,该按钮首先取消会话,然后关闭实际的标签 到目前为止,我只得到会话破坏的部分,我无法弄清楚如何让Tab关闭完成 我尝试使用setIntervals在会话被销毁后回显该函数,但我没有设法完成。有人知道一些tipps?谢谢!
编辑:所有代码都在同一页面上

这是我的代码:

[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">  

[PHP]
这是<?php

之后的第一行代码
if($_REQUEST["vLogout"])
{
session_start();

session_unset();
session_destroy();
echo "<script>closeTab();</script>";
}  

[Javascript]

function logout(f)
{
var confirmed = confirm("Are you sure you want to logout?");
    if (confirmed){
    f.method="post";
    f.vLogout.value = true;
    f.submit();
    }
}

function closeTab(){
    confirm("test");
//window.open(document.URL,'_self','resizable=no,top=-245,width=250,height=250,scrollbars=no');
//window.close();
}

4 个答案:

答案 0 :(得分:1)

function logout(f)
...
    f.submit();

您实际上正在提交表单,该表单会导致请求 new 文档,即当php脚本完成且其输出<script>closeTab();</script>已传输到客户端时,没有功能closeTab ..更多。
也不能保证你的javascript代码可以关闭那个特定的窗口,所以我建议让你的php脚本打印出一个完整的html文档尝试来关闭窗口/标签,但也会显示一些在脚本失败的情况下为用户提供的信息。

答案 1 :(得分:1)

你可以尝试在logout(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();";

它应该有用。

答案 2 :(得分:1)

注意:很可能,您无法使用JS关闭选项卡以解决​​安全问题。您只能使用JS打开使用JS打开的选项卡。

您可以使用JQuery。不要提交表格。使用onclick事件向服务器发送Ajax请求。当Ajax请求的dataType是'script'时,浏览器将执行响应体作为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>
logout.php中的

<?php
session_start();
session_unset();
session_destroy();

echo "closeTab();";
?>

答案 3 :(得分:0)

使用session_start();在页面顶部而不是任何函数

和onClick =“logout(this.form)”到onClick =“logout(document.form)”

使用输入类型=提交。不是“按钮”而是取代$ _REQUEST [“vLogout”]使用
        if(isset($ _ POST [“vLogout”]))或if(isset($ _ GET [“vLogout”]))