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