Измените переменную $ _SESSION языка PHP с помощью AJAX и без перезагрузки страницы - PullRequest
1 голос
/ 13 апреля 2019

Я занимаюсь разработкой многоязычного сайта (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'
    );
?>

Затем я выполняю AJAX-вызов в main.js, чтобы изменить переменную сеанса при нажатии любой из языковых кнопок

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, чтобы содержимое изменялось на соответствующем языке без обновления страница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...