如何在jquery中更改具有不同事件的php的会话值


How to change the session value of php with different events in jquery

$("#family").dblclick(function(){
 <?php $_SESSION["album_name"] = "family"; ?>
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});
$("#friends").dblclick(function(){
 <?php $_SESSION["album_name"] = "friends"; ?>
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});
$("#work").dblclick(function(){
 <?php $_SESSION["album_name"] = "work"; ?>
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});
$("#others").dblclick(function(){
 <?php $_SESSION["album_name"] = "others"; ?>
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});

我想在 jquery 中使用各种 dblclick 事件更改会话值。但它存储了最后一个值 ie= "其他",即使我点击了其他一些 id。

你不能从 JavaScript 输出 PHP 代码。使用该代码段,您的浏览器将看到以下内容:

$("#family").dblclick(function(){
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});
$("#friends").dblclick(function(){
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});
$("#work").dblclick(function(){
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});
$("#others").dblclick(function(){
 location.href = "<?php echo base_url(); ?>index.php/welcome/home_images/";
});

虽然$_SESSION['album_name']将包含您分配的最后一个值,但在本例中:"其他"。

为什么?由于 PHP 在您的服务器中被解释,因此它会生成一个输出(在您的情况下为 HTML 文档(并在响应发送它。

例如,您可以在 JavaScript 中使用 PHP 从服务器打印值,如下所示:

// Assuming $foo is 'bar', will output var foo = 'bar';
var foo = '<?php echo $_SESSION['foo']; ?>';

要执行您尝试执行的操作,您需要对服务器进行 AJAX 调用:

$("#family").dblclick(function(){
 $.ajax({
   url: 'http://yourdomain.com/album_name.php',
   type: 'post',
   data: {albumName: 'family'},
   success: function(response) {
     // this function will be executed when the server responds successfully to the AJAX call
     // response will have whatever you send from the server.
     // In this example: 'ok'
     alert(response);
   }
 });
});

然后,在您的服务器中:

// album_name.php
$whitelist = array('family', 'friends', 'work', 'others'); 
if (isset($_POST['albumName'] && in_array($_POST['albumName'], $whitelist)) 
{
  $_SESSION['album_name'] = $_POST['albumName'];
  echo 'ok';
}

您需要使用 ajax 来实现每个事件的存储会话。在会话中others值的原因,它是与之相关的最后一个分配。

唯一可以更改$_SESSION变量的是服务器。因此,您需要向服务器上的 PHP 脚本发送请求,并让该脚本更新变量。你不能在客户端用JavaScript做到这一点。

您可以将 album_name 变量添加到要重定向到的 URL 的查询字符串中并具有索引.php在执行脚本的其余部分之前查找它并更新会话值......

...?album_name=family

然后在索引开头的某个地方.php...

if (isset($_GET['album_name'])) {
    $_SESSION['album_name'] = $_GET['album_name'];
}

确保这是在调用session_start()之后进行的,否则$_SESSION变量将不存在。