【问题标题】:trouble with jquery and session varjquery 和 session var 的问题
【发布时间】:2013-08-20 22:52:51
【问题描述】:

点击图片时我需要更改一些会话变量。

所以我在相关图片上添加了一个类(这些图片是标志)。它用于翻译网站。

在我的网站中,语言是使用 session var 定义的,默认设置为英语。

所以人们可以改变它们

这是<img src="images/fr.png" title="French" alt="French" class="flag" id="fr">我得到的一种图像。所以我添加了class和Id,

然后我使用 jquery 编写了以下代码,使其在同一页面上无需重新加载:

<script type="text/javascript">
            $(document).ready(function () {
                $("img.flag").click(function(){
                    // Get the src of the image
                    var src = $(this).attr("id");

                    // Send Ajax request to backend.php, with src set as "img" in the POST data
                    $.post("lib_php/session.php", {"lang": src});
                })
            })
        </script>

在我发送帖子的页面上,我只有那个代码:

<?php
session_start();
    // do any authentication first, then add POST variable to session
    $_SESSION['lang'] = $_POST['lang'];
?>

问题是什么都没有改变,一切都保持不变。

我不知道我错在哪里

任何帮助将不胜感激。

【问题讨论】:

  • 您确定lib_php/session.php 可以访问吗?用绝对路径试试

标签: php jquery session session-variables


【解决方案1】:

仅看上面的代码很难说。据我所知,jQuery 和 PHP 的语法看起来都很好。我想您的问题可能是由以下原因之一引起的:

  • 您没有将信息发布到正确的页面。检查方法:在您的 PHP 中 echo $_POST['lang']
  • 您没有在所有 PHP 页面中包含 session_start()
  • 由于没有正确包含 jQuery,您甚至没有发布帖子 - 检查您的浏览器控制台,看看是否真的触发了 POST 调用。

【讨论】:

  • 正如我所见,var 确实发生了变化,但我的翻译没有出现,我有点迷茫,事实上我在标题 if ($_SESSION['lang'] == 'fr') { include_once('lang/fr.php'); } elseif ($_SESSION['lang'] == 'en') { include_once('lang/eng.php'); } elseif ($_SESSION['lang'] == 'de') { include_once('lang/de.php'); } elseif ($_SESSION['lang'] == 'ru') { include_once('lang/ru.php'); } elseif ($_SESSION['lang'] == 'ch') { include_once('lang/ch.php'); } else { include_once('lang/fr.php'); } 上有以下代码,因为我的会话变量有改了为什么不出现?
  • 1) 使用 Switch statement 而不是 if-elses 和 2) 我不知道,请在上面回显“lang”值。还要确保该语句在您设置之后出现。
  • 另外,为什么你有两个条件都返回 lang/fr.php - 如果你希望它成为你的默认值,那么在你原来的 if-else 条件下它应该只是在 else (在一个开关,default)
【解决方案2】:

你必须在你正在使用&lt;script&gt;的文件中使用session_start();

<?php session_start(); ?>

<script type="text/javascript">
            $(document).ready(function () {
                $("img.flag").click(function(){
                    // Get the src of the image
                    var src = $(this).attr("id");

                    // Send Ajax request to backend.php, with src set as "img" in the POST data
                    $.post("lib_php/session.php", {"lang": src});
                })
            })
        </script>

替代函数

我尝试使用 $.ajax 并且它有效。请试试这个

<img src="images/fr.png" title="French" alt="French" class="flag" id="fr" />

<script type="text/javascript">
$('img.flag').click(function() {
    var src = $(this).attr("id");
    $.ajax({
        type:'POST',
        data: {lang: src},
        url:'lib_php/session.php'
    });
});
</script>

注意:重要的是&lt;script type="text/javascript"&gt;img 标记之后

【讨论】:

  • 是的,我在有脚本的主文件上启动了会话
  • 我试过你的代码,只有在添加session_start();后才能使用
  • 是的,我看到了,但我真的不明白为什么翻译没有出现
  • 谢谢它工作正常,我已经发出警报,但事实上你知道我有这个代码if ($_SESSION['lang'] == 'fr') { include_once('lang/fr.php'); } elseif ($_SESSION['lang'] == 'en') { include_once('lang/eng.php'); } elseif ($_SESSION['lang'] == 'de') { include_once('lang/de.php'); } elseif ($_SESSION['lang'] == 'ru') { include_once('lang/ru.php'); } elseif ($_SESSION['lang'] == 'ch') { include_once('lang/ch.php'); } else { include_once('lang/fr.php'); } 我不明白的是会话变量已经改变,但包含的页面没有改变
  • 您是否希望所有字符串都更改为新语言而无需重新加载页面?
【解决方案3】:

尝试以下检查是否一切正常:

$.post("lib_php/session.php", {"lang": src} ,function(data)
{
    alert (data);
});

然后在会话 php 中:

echo  $_SESSION['lang'];

【讨论】:

  • 您好,感谢您的回复,警报显示了良好的变量,但它似乎并没有改变我的翻译,当您点击语言标志时,请他看看apple-wholesale.eu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多