웹 프론트엔드 JS 튜토리얼 새로 고치지 않고 ajax 및 html5 변경 페이지 URL

새로 고치지 않고 ajax 및 html5 변경 페이지 URL

Nov 22, 2016 pm 01:59 PM
ajax html5

성능

크롬이나 파이어폭스 및 기타 브라우저를 사용하여 이 블로그, github.com, plus.google.com 및 기타 웹사이트를 방문하시면 주의하시면 페이지 간 클릭이 발생하는 것을 확인하실 수 있습니다. ajax 요청을 통해 비동기화되고 동시에 페이지의 URL이 변경되었습니다. 그리고 브라우저의 앞뒤를 매우 잘 지원할 수 있습니다.

무엇이 이렇게 강력한 기능을 가지고 있는 걸까요?

HTML5는 새로 고치지 않고 페이지 URL을 변경하는 데 사용되는 새로운 API인 History.pushState 및 History.replaceState를 참조합니다.

기존 AJAX와의 차이점

기존 Ajax에는 다음과 같은 문제점이 있습니다.

1. 페이지 내용은 새로 고침 없이 변경할 수 있으나, 페이지 URL은 변경할 수 없습니다

2. 접근성을 높이기 위해 콘텐츠 변경 후 URL의 해시가 변경되는 경우가 많습니다

3. 해시 방식은 브라우저의 정방향 및 역방향 문제를 잘 처리하지 못합니다

4. 게다가 브라우저는 onhashchange 인터페이스를 도입했습니다. 이를 지원하지 않는 브라우저는 해시가 변경되었는지 여부만 주기적으로 확인할 수 있습니다

5. 그러나 이 방법은 검색 엔진에 매우 비우호적입니다

6. Twitter와 Google은 #!xxx(즉, 해시의 첫 번째 문자는!)를 사용하기로 합의했으며 검색 엔진에서는 이를 지원합니다.

기존 Ajax로 인해 발생하는 문제를 해결하기 위해 HTML5에 새로운 API가 도입되었습니다. 즉,history.pushState,history.replaceState

pushState를 통해 브라우저 기록을 조작할 수 있으며 replacementState 인터페이스 및 현재 페이지의 URL을 변경합니다.

pushState는 지정된 URL을 브라우저 기록에 추가하는 것이고, replacementState는 현재 URL을 지정된 URL로 바꾸는 것입니다.

사용 방법

var state = {
    title: title,
    url: options.url,
    otherkey: othervalue
};
window.history.pushState(state, document.title, url);
로그인 후 복사

제목과 URL 외에도 상태 객체에 다른 데이터를 추가할 수도 있습니다. 예를 들어 Ajax 전송을 위한 일부 구성을 저장하려고 합니다. .

replaceState와 pushState는 유사하므로 여기서는 소개하지 않겠습니다.

브라우저의 앞으로 및 뒤로 작업에 응답하는 방법

onpopstate 이벤트는 window 개체에서 제공됩니다. 위에서 전달된 상태 개체는 이벤트의 하위 개체가 되므로 저장된 제목과 URL을 얻을 수 있습니다.

window.addEventListener('popstate', function(e){
    if (history.state){
        var state = e.state;
        //do something(state.url, state.title);
    }
}, false);
로그인 후 복사

이러한 방식으로 Ajax와 pushState를 결합하여 새로 고침 없이 완벽하게 탐색할 수 있습니다.

일부 제한 사항

1. 전달된 URL은 동일한 도메인에 있어야 하며 도메인을 교차할 수 없습니다

2. 상태 개체는 많은 사용자 정의 속성을 저장할 수 있지만 개체입니다. DOM 객체와 같이 직렬화할 수 없는 객체는 저장할 수 없습니다.

백엔드에서 일부 처리에 해당

이 모드에서는 ajax를 사용하여 새로 고침 없이 탐색하는 것 외에도 변경된 URL을 직접 요청한 후 정상적으로 탐색할 수 있는지 확인하는 것도 필요합니다. 따라서 백엔드는 이러한 처리를 받아야 합니다.

1. pushState를 사용하여 ajax에 setRequestHeader('PJAX', 'true')와 같은 특수 헤더를 보냅니다.

2. 백엔드가 PJAX=true인 헤더를 얻으면 페이지의 공통 부분이 출력되지 않습니다. 예를 들어, PHP는 다음

function is_pjax(){
    return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true';
}
로그인 후 복사

을 통해 판단할 수 있습니다. 인터페이스에는 pushState, replacementState, onpopstate만 있지만 사용 시 많은 처리가 필요합니다.

이를 위해 jquery 기반 플러그인이 작성되었으며, ajax+history.pushState가 pjax에 캡슐화되었습니다. 프로젝트 주소: https://github.com/welefen/pjax. qwrap, Kissy 3개 버전

또한 HTML4 및 HTML5의 효과를 고려하고 싶다면 History.js를 참조할 수 있으며 프로젝트 주소는 https://github.com/browserstate/history입니다. .js .

참고자료:

1. HTML5 History API 소개

2. 브라우저 기록 조작

3. 🎜>

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

See all articles