【问题标题】:Function call after Value is changed更改值后的函数调用
【发布时间】:2014-02-17 10:29:05
【问题描述】:

我正在尝试获取一个注销按钮,该按钮首先取消设置会话,然后关闭实际选项卡。
到目前为止,我只得到了会话销毁的部分,我不知道如何完成 Tab 关闭。
在会话被销毁后,我尝试使用 setIntervals 回显该功能,但我没有设法完成。有人知道一些tips吗?谢谢!
编辑:所有代码都在同一页面上

这是我的代码:

[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]
这是&lt;?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();
}

【问题讨论】:

  • 因为在任何输出发送到浏览器(如格式良好的 HTML)后,您无法调用 session_start() - 您应该永远输出这样的 Javascript 代码,因为它不可能是它应该在代码中的位置。如果它们都在同一页面中,请设置一个变量标志,例如。 $closeWindow = true 然后在您生成正确的页面标记结构后检查它,然后您可以调用您的函数。
  • 尝试将onClick="logout(this.form)"改为onClick="logout(document.form)"
  • @scrowler 非常感谢,这就是我需要的提示!让它像我想要的那样工作。 :)

标签: javascript php html function hidden-field


【解决方案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();";
?>

【讨论】:

  • 谢谢,移动了一些东西,现在它就像我尝试的那样工作 - 更简单,占用空间更少。 :)
【解决方案2】:

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

它应该可以工作。

【讨论】:

  • 不起作用,它只是回显了“closeTab();”一开始。 :(
【解决方案3】:
function logout(f)
...
    f.submit();

您实际上是在提交导致 new 文档被请求的表单,即当 php 脚本完成并且其输出 &lt;script&gt;closeTab();&lt;/script&gt; 已传输到客户端时,没有函数 @ 987654323@ ..不再。
也不能保证您的 javascript 代码被允许关闭该特定窗口,所以我建议让您的 php 脚本打印出一个完整的 html 文档,尝试关闭窗口/选项卡,但也显示一些为用户提供的信息,以防脚本失败。

【讨论】:

    【解决方案4】:

    使用 session_start();在页面顶部,而不是在任何功能中

    然后 onClick="logout(this.form)" 到 onClick="logout(document.form)"

    使用输入类型=提交。不是“按钮”,而是使用 $_REQUEST["vLogout"]
    if(isset($_POST["vLogout"])) 或 if(isset($_GET["vLogout"]))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2016-05-28
      • 1970-01-01
      相关资源
      最近更新 更多