Измените переменную $ _SESSION языка PHP с помощью AJAX и без перезагрузки страницы

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

Я разрабатываю многоязычный сайт (es и en), и мне нужно изменить язык всего сайта, когда пользователь нажимает на любую из языковых кнопок. Я сохраняю переменную сеанса config.php и загружаю страницу на выбранном языке с require помощью инструкции:

 <?php
    session_start();
    if (!isset($_POST['lang']) amp;amp; (!isset($_SESSION['lang']))) {
        $_POST['lang'] = 'en';
        $_SESSION['lang'] = $_POST['lang'];        
    }  else if (isset($_POST['lang']) amp;amp; $_SESSION['lang'] != $_POST['lang'] amp;amp; !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, чтобы содержимое менялось на соответствующем языке без обновления страницы.

Комментарии:

1. Учитывая, что вы пытаетесь заменить всю страницу другим языком, вы хотите перезагрузить. Основная цель ajax — избежать перезагрузки. Это не подходит для вашего варианта использования.

2. Рабочим (но не очень хорошим) решением было бы запустить перезагрузку вручную через JavaScript в success функции. В этом случае вам вообще не понадобится AJAX, потому что @Taplar прав — вы можете напрямую перезагрузить страницу через PHP, когда была нажата одна из языковых кнопок после смены языка в сеансе.