如何检查是否在 JQuery 警告中设置了会话:同步 XMLHttpRequest



我的网站有登录系统,当点击带有 id show 的链接时,我希望它显示登录窗口,如果未设置会话。设置会话后(登录时),我希望show链接显示下拉菜单。

如何通过PHP或JQuery或同时使用两者来实现这一点?另外,我不想重定向或刷新页面。

下面是我编写的代码,它不起作用:

索引.php

<a href="" id = "show">SHOW</a>
//this is hidden
<div id="dropdown">
    <a href="one.php">one</a>
    <a href="two.php">two</a>
</div>
//this is hidden
<div id="loginWindow">
    <p>please login</p>
    ....code
</div>

登录.php

<?php
    ob_start();
    session_start();
    include_once('database.php');
    if(isset($_SESSION['username'])){
        echo    '<script>',
                '$(function(){ afterLoginIcon(); })',
                '</script>';
    }
    if (!(isset($_SESSION['username']))){
        echo    '<script>',
                '$(function(){ showpopup(); })',
                '</script>';
    }
    else {echo "something went wrong"; return false;}

    ob_end_flush(); 
?>

脚本.js

$('#show').click(function (e) {
    $.post( "loginIcon.php" );
    return false; //to prevent refreshing the page
});
function showpopup()
{
     $("#loginWindow").fadeIn();
     $("#loginWindow").css({"visibility":"visible","display":"block"});
}
function afterLoginIcon() {
    $("#dropdown").show();
}

编辑:我已将$.post( "loginIcon.php" );更改为$('#show').load( 'loginIcon.php' );并且可以正常工作,但是,在控制台中,我收到警告说主线程上的同步XMLHttpRequest已被弃用,因为它对最终用户的体验有不利影响。

不是从 php 脚本返回 javascript 代码,如果用户登录,您可以只返回字符串"1",如果用户未登录,则返回字符串"0"

$('#show').click(function (e) {
    $.post("login.php", function(data) {
       if(data == "1"){
          afterLoginIcon()
          // user is logged in and menu should show
       } else if(data == "0"){
          // user not logged in and form should show
          showPopup();
       }
    });
});

没有调用函数的原因是因为你返回了一个字符串作为来自 php 脚本的响应,字符串不会作为 javascript 语句执行

然后 php 脚本将如下所示

<?php
    ob_start();
    session_start();
    include_once('database.php');
    if(isset($_SESSION['username'])){
      echo '1';
    } else {
      echo '0';
    }

    ob_end_flush();
?>

最新更新