2011-10-21 3 views
2

브라우저의 뒤로 버튼에 문제가 있습니다. IE 및 Google 크롬에 문제가 있습니다. 검색 엔진을위한 자동로드 메커니즘을 만들고 있습니다. 메커니즘은 Google 검색과 같이 작동합니다. 건물브라우저 캐시 및 기록 뒤로 버튼 (해싱, history.js)

절차 :
1) 입력 키워드
2) AJAX 검색 요청
JSON 같은 3) 응답
용기에리스트를 추가) JSON
5를 사용 4) 건물 결과 목록

결과를 작성하고 다른 페이지로 리디렉션하고 결과가있는 페이지로 돌아 가면 결과가 사라집니다. 해시, history.js 등의 개발자가 설명한 많은 솔루션을 시도했지만 모든 것이 작동하지 않습니다.

+0

정확히 한 가지 시도해 보았던 것 (코드 스 니펫 또는 실제 예제가 더 좋음)과 실패한 정확한 방법에 대해 자세히 설명해보십시오. 그렇지 않으면 당신에게 유용한 답을주기가 어렵습니다. – Nickolay

답변

0

돌아 가면 페이지의 원본 HTML이 캐시에서로드됩니다. Javascript를 통해 추가 한 내용은 모두 저장되지 않으므로 페이지로드시 해당 수정 사항을 복원해야합니다.

이 경우 popstate 이벤트를 사용할 수 있습니다. 심지어 해고되면 정보를 복원해야합니다. AJAX 요청을 다시 실행하고 결과를 처리하여이를 수행 할 수 있습니다. 따라서 동일한 요청을 다시 실행하려면 충분한 정보를 url (또는 해시)에 저장해야합니다.

즉, 이전 요청을해야 할 수도 있습니다. 예를 들어 목록의 X 항목을 가져 오기 위해 Ajax 요청을 실행하면 X가 요청 후에 매번 증가하므로 (각 클릭에서 다음 항목을 가져올 수 있도록) 모든 항목을 다시로드해야합니다 . 그렇게하지 않으면 캐시 된 페이지의 원래 항목과 AJAXed 된 최신 항목 만 가져 오며 그 사이의 항목은 누락됩니다.

그러나 상태를 저장하기 위해 pushState 또는 replaceState을 사용하는 경우 추가 데이터를 저장할 수도 있습니다. 이를 사용하여 JSON 결과를 상태와 함께 저장하므로 추가 요청이 필요하지 않습니다. 어쨌든 이것은 최적화이며 엄격하게 필요하지 않으므로 popstate에 발생하는 AJAX 요청 구현부터 시작해야합니다. 어쨌든 데이터가 상태와 함께 저장되지 않을 수 있으므로 항상 필요하므로 대체로 AJAX 요청이 필요합니다.

+0

멋진 조언, 그러나 (두 번째 단락부터) 오래된 브라우저와 관련이없는 OP는 문제가 있습니다. – Nickolay

+0

@GolezTroll : 정확하지 않습니다. http : // stackoverflow. com/questions/1195440/ajax-back-button-and-dom-updates –