2013-04-19 4 views
10

표시됩니다. 클릭 할 때 AJAX를 통해 아래 목록의 내용을 새로 고치기위한 여러 검색/필터 버튼이있는 페이지가 있습니다. .HTML5 기록 API : JSON은 "뒤로"다른 페이지로 이동 한 다음 다시 "앞으로"

이 과정에서 새로운 필터링 된 페이지가 북마크 가능하도록 뒤로 버튼이 작동하도록 히스토리 (푸시 스테이트를 통해)를 수정합니다. 나는 또한 Popstate 이벤트를 듣고, Back에 반응합니다.

window.addEventListener("popstate", function(ev) { 
    if (!window.history_ready) { return; } // Avoid the one time it runs on load 
    refreshFilter(window.location.href, true); 
}); 

refreshFilter: function(newURL, backButtonPressed){ 
    $.ajax({ url: newURL}).done(blah); 

    if (!backButtonPressed) { 
    window.history_ready = true; 
    history.pushState(null, null, newURL); 
    } 
} 

이 하나의 이상한 경우를 제외하고, 훌륭하게 작동 ...

  • 사용자가 페이지에있는 "A"
  • 그들은 클릭

    내 코드는 더 많거나 적은 같은 외모 역사와 함께하는이 페이지로 이동하는 링크 ("B"라고 부름)

  • 두 개의 필터를 실행 한 다음 뒤로 몇 번 누르면 "B"의 초기 상태로 돌아갑니다.
  • 다시 '뒤로'를 클릭하면 다시 'A'로 전송됩니다.
  • 이 때 전달 버튼을 누르면 페이지 B에 대해 서버에 다시 요청하는 대신 브라우저에 묶음이 표시됩니다 페이지 내용과 JSON 코드의

이 적어도 최근에

왜 내가 그것을 어떻게 이런 일이 피할 수된다 크롬 (이 JSON은 물건을 필터링하는 내 AJAX 요청의 하나의 응답이다)?

답변

8

크롬은 방문한 페이지를 캐시하고, 뒤로 또는 앞으로 이동하면 캐시를 사용하여 페이지를 빠르게 표시합니다. AJAX에 의해 서버에서 JSON을 검색하는 데 사용하는 URL이 Chrome과 동일하면 Chrome이 캐시에서 해당 페이지를 선택하는 것이 가능합니다. 좋은 HTML 대신 JSON 덤프 일뿐입니다.

+5

참조하십시오 -받는 완전히 무시 '및 아약스 = 1'추가하여 (약간 AJAX에 의해 가져온 URL을 변경 쿼리 문자열) - 작동했습니다! :) – Ashe

+1

특히이 솔루션을 사용할 때 Chrome 캐시를 비울 수 있습니다. Chrome이 이전 결과를 캐시했기 때문에 Chrome을 계속 사용해 본 후에도 여전히 작동하지 않는 것처럼 보일 수 있습니다. – jonnybot

+0

@jonnybot 고마워, 나는 다른 사람들을 위해,하지만 나를 위해 일하는 수정 생각 캐시를 지우기 작업을 시작하고 버그가 사라졌습니다. – sandre89

관련 문제