2012-06-30 2 views
2

history.js 사용에 약간 문제가 있습니다.History.js with Ajax Server 응답

dojotoolkit으로 history.js + ajax를 사용하여 소스 브라우저와 같은 github을 구현하려고합니다.

그것은 작동하지만 서버 측 내가 PHP를 사용

에 약간의 문제가있어, 및 history.js pushState와 특정 페이지로드는, 서버가 먼저 요청 유형을 확인합니다 때, "그것은 아약스입니까? ". Ajax이면 서버는 요청 된 페이지 부분 만 반환하고 그렇지 않으면 서버가 전체 페이지를 반환합니다.

문제는 브라우저를 닫은 다음 다시 열면 페이지가 아약스 요청으로 알려져 있기 때문에 전체 페이지가 아닌 서버가 반환하는 아약스 페이지 만 표시된다는 것입니다.

이 문제를 어떻게 해결할 수 있습니까?

+0

서버가 Ajax 요청임을 어떻게 알 수 있습니까? 브라우저를 다시 연 후 모든 서버에 주소 필드의 URL이 있어야합니다. 공통적 인 것은''x-request-required '라는 헤더가''xmlhttprequest'라는 값을 가지고 있는지 확인하는 것입니다. 서버가하는 일이라면 문제가 없습니다. – jgivoni

답변

1

나는 똑같은 문제가있어서 그것을 연구하는 데 시간을 보냈다. 히스토리에서 탭을 복원하거나 다른 페이지의 페이지로 돌아갈 때, 원래 페이지는 일반적으로 브라우저 캐시에서 복원됩니다 (처음에는 머리글을 포함하여 서버에 똑같은 요청을한다고 생각했습니다).

URL에 대한 마지막 요청이 AJAX이고 상태가 푸시 되었다면 AJAX 응답이 브라우저에 캐시되고 나중에 캐시 된 응답이 표시됩니다.

이 문제에 대한 해결책은 적절한 헤더를 보내어 AJAX 요청의 캐싱을 사용하지 않도록 설정하는 것입니다. 이것은 PHP에서 브라우저가 내 응답을 캐시하지 않도록하기 위해 사용하는 것입니다 :

header("Expires: Sun, 19 Nov 1978 05:00:00 GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Pragma: no-cache");