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

时间:2017-01-27 02:11:01

标签: javascript php jquery session

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

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

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

的index.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>

的login.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(); 
?>

的script.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是因其对最终用户体验的不利影响而弃用。

1 个答案:

答案 0 :(得分:0)

您可以只返回一个字符串&#34; 1&#34;而不是从PHP脚本返回javascript代码。如果用户已登录或&#34; 0&#34;如果用户不是

$('#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();
?>