Задать вопрос
saboteur_kiev
@saboteur_kiev
software engineer

Как обновлять url в адресной строке или что делать?

Глупый вопрос.
Решил сделать простенький сайт, без ссылок. При клике в меню просто обновляется main блок, либо просто вписывается готовый текст, либо через ajax подгружается.

Проблема в том, что ссылка в браузере естественно не меняется и скопировать ее и кинуть кому-то - он естественно получит ссылку на начало, а не на "подменю".

Какой вообще подход правильно рулит - я не уверен, что я могу из JS подменить ссылку в адресной строке.
Но как тогда выходить из ситуации? Создавать кнопку "скопировать ссылку" на каждой страничке мне кажется не самым правильным вариантом.
  • Вопрос задан
  • 414 просмотров
Подписаться 2 Простой 10 комментариев
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
Если Вы хотите сделать что-то похожее на SPA (Single Page Application), то для начала Вам надо научить сервер отдавать всегда index.html. Следующий шаг - History API, это пригодится для подмены URL и генерации Ваших ссылок. А для того чтобы загрузить необходимое содержимое необходимо будет проанализировать location.pathname и отобразить необходимую информацию (как будто Вы нажали на элемент меню).
Второй вариант попроще - использовать location.hash для хранения уникального URL, загружать будете также как в первом варианте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Ответить на ваш вопрос может следующий фрагмент кода (моё творение):

window.updateColours = () => {
    const colours = document.querySelectorAll('[data-href]')
    colours.forEach(colour => {
        const href = $(colour).data('href')
        const hrefParts = href.split('/')
        const id = hrefParts[hrefParts.length - 1]

        // ...

        $(colour).on('click', () => {
            history.replaceState(null, '', href) // pay attention here
            
            // ...

            $.ajax({
                url: ...,
                method: 'get',
                success: (response) => { ... },
                error: (response) => { ... }
            })
        })
    })
}


В этом коде data-href это кастомный аттрибут, в котором я сохраняю данные, которые мне нужны в дальнейшем для обработки

Очень важно обратить внимание на строчку кода:

history.replaceState(null, '', href)

Это позволит вам изменять url без перезагрузки страницы и подгружать необходимые данные
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы