会话标志在Javascript中不起作用

我在javascript中为IF函数使用会话标志。 如果会话标志为1,则JavaScript将显示点击时的特定div。 我已经手动尝试过,但代码似乎不起作用。

这是我的JS代码:

$(document).ready(function(){
check = <?= $_SESSION['flag'] ?>;
$("#bag").click(function(){
    if(check==0){
        $("#login").show();
        $("#notlogin").hide();
    } else {
        $("#login").hide();
        $("#notlogin").show();
    }
});
}); 

这是HTML文件头部的会话:

<?php @session_start();
$_SESSION['flag']=0;
?>

请在小提琴中检查:http://jsfiddle.net/9mm5ougu/

配置-haslogin.php

<?php
error_reporting(E_ALL ^ E_NOTICE); 
ini_set("display_errors", 1);
mysql_connect("mysql.com","name","password") or die("cannot connect");
mysql_select_db("databasename") or die("Fail here");
$myemail= $_POST['myemail'];
$mypassword= $_POST['mypassword'];
$sql= "SELECT * FROM user WHERE myemail='".$myemail."' and mypassword='".$mypassword."'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
{
echo "Login successful";
$_SESSION['flag']=0;
header("Location:index.php");
}
?>

您不能将PHP代码放入JavaScript文件中,因为PHP在服务器端解释,而JavaScript在客户端解释(至少在您的用例中)。

如果您确实需要基于PHP $_SESSION值进行条件处理,则可以有多种选择(从最差的到最好的一个列出):

解决方案1:使用动态JavaScript文件(最差)

PHP代码放入JavaScript文件中,但使用.php扩展名而不是.js 。 你的JavaScript代码看起来像这样:

file.js.php

$("#bag").click(function(){
    <?php if ($_SESSION['flag'] === 0): ?>
        $("#login").show();
        $("#notlogin").hide();
    <?php else: ?>
        $("#login").hide();
        $("#notlogin").show();
    <?php endif; ?>
});

你可以将这个PHP文件包含为一个JavaScript文件:

的index.php

<script src="file.js.php"></script>

这是最糟糕的解决方案: - 当你混合两种语言时,你的文件很快就会变得不可读 - 因为文件现在是动态的,用户的浏览器不能把它放在客户端缓存上 - 你使用PHP服务器资源不是真正必要的 - 您无法在CDN或专用于提供静态文件的简单服务器上部署文件 - 您无法缩小JavaScript文件

解决方案2:使用两个不同的JavaScript文件

创建两个不同的JavaScript文件,一个用于登录用户,另一个用于注销。 使用$_SESSION值加载正确的文件。

loggedOut.js

$("#bag").click(function(){
    $("#login").hide();
    $("#notlogin").show();
});

loggedIn.js

$("#bag").click(function(){
    $("#login").show();
    $("#notlogin").hide();
});

的index.php

<body>
    <!-- page content here -->


    <?php if ($_SESSION['flag'] === 0): ?>
        <script src="loggedIn.js"></script>
    <?php else: ?>
        <script src="loggedOut.js"></script>
    <?php endif; ?>

</body>

这个解决方案比第一个更好,因为它解决了几乎所有的问题:文件缓存在客户端,而且不会混合使用PHPJavaScript代码。 但是这不是最好的解决方案,因为它会带来很多代码重复,并且维护代码库会变得更加困难。

解决方案3:将模型客户端(或类型)

你可以将你的数据模型传递给JavaScript文件,并直接从那里使用它。 例如,您可以在<body>标记上拥有一个取决于$_SESSION['flag']值的类名,并且基于此值, JavaScript文件的行为将有所不同。 这里是一个例子:

的index.php

<?php
$className = $_SESSION['flag'] ? 'logged-in' : 'logged-out';
?>

<body class="<?php echo $className; ?>">
    <!-- page content here -->

    <script src="yourFile.js"></script>
</body>

yourFile.js

$(document).ready(function(){

    var isLoggedIn = $('body').hasClass('logged-in');

    $("#bag").click(function() {
        if (isLoggedIn)
        {
            $("#login").show();
            $("#notlogin").hide();
        }
        else
        {
            $("#login").hide();
            $("#notlogin").show();
        }
    });

});

如果这个类只被JavaScript代码使用(这意味着这个类将不会被用在CSS代码中),你应该用这个js-前缀来区分它与真正的CSS类名称。


在Javascript中访问PHP变量时,请使用引号括起来

check = "<?= $_SESSION['flag'] ?>";

检查这个小提琴。


使用AJAX从服务器获取所需的数据。

例如,创建get-data.php:

<?php @session_start();
_SESSION['flag'] = 0;
json_encode(_SESSION['flag']);
?>

从ajax调用它:

$(document).ready(function(){ // your DOM loaded
    $.ajax({
        url: '/get-data.php',
        success: function(response){
            $("#bag").click(function(){
                if(JSON.parse(response) == 0){
                    $("#login").show();
                    $("#notlogin").hide();
                } else {
                    $("#login").hide();
                    $("#notlogin").show();
                }
                });

        },
        error: function(){
            alert('data not loaded');
        },
         complete: function(){

       }
    })

})
链接地址: http://www.djcxy.com/p/23789.html

上一篇: Session Flag doesn't work in Javascript

下一篇: Text highlighting in html5