0

我想用 jquery 事件更改 php $_SESSION。在下面的代码中 $_SESSION['lang'] 不要改变

    $('[id^="lang_"]').click(function(){
        alert('<?php echo $_SESSION['lang']; ?>');
        lang_id = $(this).attr('id').split(/\_/);
        alert(lang_id[1]);
        switch( lang_id[1] ){
            case '1':
                //lang_id[1] is 1
                <?php unset($_SESSION['lang']); $_SESSION['lang'] = null;  $_SESSION['lang'] = '11111'; ?>
                break;
            case '2':
                //lang_id[1] is 2
                <?php unset($_SESSION['lang']); $_SESSION['lang'] = null;  $_SESSION['lang'] = '22222'; ?>
                break;
        }

我没有任何问题来获得正确的 lang_ id。但$_SESSION['lang']不要改变任何地方

4

2 回答 2

4

我其实有点无语了。:)

好的..

Javascript(和 jQuery)在访问者浏览器上运行。

PHP 在您的网站所在的 Web 服务器上运行。

您不能在 Javascript 中运行 PHP 代码。您可以将 PHP 变量输出到 JS 函数中以定义特定值,例如var value='<?php echo $theValue ?>';- 但您不能在 JS 代码的运行中运行 PHP 逻辑。

如果您想这样做,您需要您的 Javascript/jQuery 对执行您想要的 PHP 页面进行 ajax 调用。

$('[id^="lang_"]').click(function(){
    alert('<?php echo $_SESSION['lang']; ?>');
    lang_id = $(this).attr('id').split(/\_/);
    alert(lang_id[1]);
    switch( lang_id[1] ){
        case '1':
            setLanguage('11111');
            break;
        case '2':
            setLanguage('22222');
            break;
    }


function setLanguage(lang){
    $.post('setLanguage.php', {language:lang}, function(){
        alert('Language has been changed');

        //if you want to reload the current page
        //window.location=window.location.href;
    });
}

然后,您的setLanguage.php页面应如下所示

<?php 
      unset($_SESSION['lang']); 
      $_SESSION['lang'] = null;  
      $_SESSION['lang'] = $_POST['language']; 
?>

请记住,虽然这会根据需要更改 $_SESSION 变量,但它不会影响页面的外观/行为方式,直到它被刷新(或您采取其他手动操作)。老实说,如果您需要刷新页面以查看更新,那么我什至可能不使用 ajax,而只是将用户直接引导到setLanguage.php该页面并将他们重定向回他们来自的地方。

于 2013-06-19T09:56:41.830 回答
0

如果您编写<?php ...?>,则在将文件提供给客户端之前,此代码将在服务器端执行。这意味着两个 php 语句都在客户端得到响应之前执行。您无法混合客户端代码和服务器端代码,因为服务器端代码在响应发送到客户端之前执行。

于 2013-06-19T09:57:12.790 回答