#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, когда была нажата одна из языковых кнопок после смены языка в сеансе.