Ошибка: язык не меняется, когда я нахожусь в URL-адресе с разными папками или каталогами

Следующий параметр добавляет язык на мой сайт:

if (isset($_COOKIE['language'])){
    if ($_COOKIE['language']==='en'){
        $WEBSITE_TITLE = " | SITE EN";
        $LANG = 'en';
        $language = "en";
    }elseif ($_COOKIE['language']==='es'){
        $WEBSITE_TITLE = " | SITE ES";
        $LANG = 'es';
        $language = "es";
    }
} else {
    $WEBSITE_TITLE = " | SITE EN";
    $LANG = 'en';
    $language = "en";
}

А через Ajax я могу изменить язык своего сайта на испанский или английский:

$(function() {
    $(".lang").click(function(e) {
        e.preventDefault();
        var language = $(this).attr('data-lang');
        var postData = {lang: language};

        var request = $.ajax({
            method : 'POST',
            url    : 'language.ini.php',
            data   : postData,
            dataType: "html"
        });
        request.done(function(data) {
            //$("html").html(data);
            //location.reload();
            //location.href = '/index.php';
            setTimeout(function(){
                location.reload();
            },100);
        });
        request.fail(function(jqXHR, textStatus) {
            alert("Error!: " + textStatus);
        });
    });
});

Данные, отправляемые Ajax, принимаются через следующие параметры:

if (isset($_POST['lang'])) {
    $lang = $_POST['lang'] ?: '';

    if ($lang === "en") {
        setcookie ('language', 'en', time()+60*60*24*365, '/', 'example.com');
    } elseif ($lang === "es") {
        setcookie ('language', 'es', time()+60*60*24*365, '/', 'example.com');
    }
}

Но ошибка возникает, когда я пытаюсь изменить язык в URL-адресе с несколькими папками или каталогами:

example.com/es/folders2/folders3/folders4/url-of-article/

В настоящее время код для смены языка работает только для меня на этих страницах:

example.com
example.com/index.php

Я думаю, что ajax не находит этот файл, когда вы находитесь в подпапке language.ini.php укажите путь к этой странице define('BASE_PATH', realpath(dirname(__FILE__))); или используйте базовый тег.

user1805543 21.12.2020 03:32

@Dlk, если вы найдете его другом, потому что в., где я перенаправлен на основной индекс страницы, и он не показывает мне никакого сообщения об ошибке, если он действительно его не найдет.

user10360773 21.12.2020 17:04

Нет, ajax не показывает ошибки php, если вы его не настроили. попробуйте открыть исходные коды и посмотреть, есть ли у вас ошибки в исходных кодах. если вы используете php require() или include(), вы получите неопределенную ошибку. ваш код должен быть таким для каталогов, которые вы указали в вопросе url : '../../../../../language.ini.php',.

user1805543 22.12.2020 12:08

@Dlk Если ajax не найдет его, он выдаст предупреждение, как настроено, прежде чем адресовать зонд, получающий данные в разных местах, правильно получая через $(".result").html(data)

user10360773 22.12.2020 13:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените dataType: "html" на dataType: "json" и добавьте console.error(jqXHR); в свою функцию отказа, перейдите в консоль и посмотрите, что вы получите.

Вероятно, у вас проблемы с типом данных.

Я проверил это, и он отлично работает для меня:

 $(function() {
    $(".lang").click(function(e) {
        e.preventDefault();
        var language = $(this).attr('data-lang');
        var postData = {lang: language};

        var request = $.ajax({
            method : 'POST',
            url    : 'language.ini.php',
            data   : language,
            dataType: "JSON"
        });
        request.done(function(data) {
            //$("html").html(data);
            //location.reload();
            //location.href = '/index.php';
            $("#results").html(data); //show data
            setTimeout(function(){
                location.reload();
            },100);
        });
        request.fail(function(jqXHR, textStatus) {
                        console.error(jqXHR);
            alert("Error!: " + textStatus);
        });
    });
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "lang"> click me </div>
<div id = "result"> </div> // Conent will show in this div.

друг, это будет работать, даже если мой файл language.ini.php не в json?

user10360773 22.12.2020 17:25

Другие вопросы по теме