使用AJAX更改PHP语言$ _SESSION变量,并且不重新加载页面

时间:2019-04-12 21:09:08

标签: php jquery ajax

我正在开发一个多语言站点(es和en),并且当用户单击任何一种语言按钮时,我需要更改整个站点的语言。我将会话变量存储在config.php中,并使用require语句以所选语言加载页面:

<?php
    session_start();
    if (!isset($_POST['lang']) && (!isset($_SESSION['lang']))) {
        $_POST['lang'] = 'en';
        $_SESSION['lang'] = $_POST['lang'];        
    }  else if (isset($_POST['lang']) && $_SESSION['lang'] != $_POST['lang'] && !empty($_POST['lang'])) {
        if($_POST['lang'] == 'en') 
            $_SESSION['lang'] = 'en';
        else if ($_POST['lang'] == 'es') 
            $_SESSION['lang'] = 'es';
    }

    require "lang/" . $_SESSION['lang'] . ".php";
    echo $_SESSION['lang'];
?>

en.php

<?php 
    $lang = array(
        'mainTitle' => 'What is our business?',
        'mainDescription' => 'Our description'
    );
?>

然后,我在main.js中进行AJAX调用,以在单击任意一种语言按钮时更改会话变量

function loadDoc(str) {
    $.ajax({
        type: 'POST',
        // this is to prevent cached results
        url: 'php/config.php?t=' + Math.random(),
        data: {
            lang: str
        },
        success: function(result) {
            console.log('Session language: ' + result)
        },
    }) 
}

$('.langContainer .es').click(() => {
    loadDoc('es')
})

$('.langContainer .en').click(() => {
    loadDoc('en')
})

尽管AJAX成功函数返回更改后的会话变量,但调用不会更改网站的语言,直到我重新加载它,这令人感到沮丧。

通过从带有锚标签的任何按钮发送GET请求,这可以与重新加载完美配合,但是我想知道是否可以使用AJAX更新会话变量,以便内容以适当的语言更改而无需刷新页面。

0 个答案:

没有答案