2014-06-09 4 views
2

에서 JS 파일에 추가됩니다,에 "_ = 13 자리"는 스트럿츠 2 jQuery 플러그인 프로젝트에서 스트럿츠 2 jQuery 플러그인 프로젝트

<script type="text/javascript" 
    src="js/sample.js"></script> 

때 그것의 JS 파일을 포함하는 간단한 JSP 페이지를 고려 페이지를 새로 고침 할 때

localhost:8080/js/sample.js?_=1402322518885 

그것이

과 같이 표시됩니다 : 당신은 당신이 13 자리로 밑줄이 URL의 끝에 추가되는 것을 볼 (파이어 폭스 방화범을 사용하여 예를 들어) 실제 요청 된 URL에서 볼
localhost:8080/js/sample.js?_=1402322518886 
localhost:8080/js/sample.js?_=1402322518887 
localhost:8080/js/sample.js?_=1402322518888 

http://struts.jgeppert.com/struts2-jquery-showcase/index.action을 (를) 볼 수 있습니다. 오픈 파이어 버그 네트워크 컨트롤을 누른 다음 widgets/spinner 메뉴로 가서 이 globalize.js?_=1402323154341

과 같은 이름으로 호출됨을 알 수 있습니다. 이렇게하면 JS가 클라이언트에 캐시되지 않습니다. 이게 뭔지 아십니까? 어떻게 막을 수 있니?! Ajax 로딩 된 컨텐츠에 JS 함수가 포함되어 있고 밑줄 더하기 숫자로 호출되는 경우이 내용이 모든 JS 파일에 적용되지 않는다는 것을 알게되었습니다.

답변

1

Struts2 jQuery 플러그인은 jQuery를 사용하여이 기능을 jQuery를의 페이지를 캐시하지 관련이있다. 플러그인은 head 태그의 ajaxcache 속성을 통해이 기능을 변경할 수 있습니다.귀하의 의견으로 기본을

<s:if test="%{theme == 'showcase' || theme == null}"> 
    <sj:head debug="true" compressed="true" jquerytheme="showcase" customBasepath="themes" loadFromGoogle="%{google}" ajaxhistory="%{ajaxhistory}" defaultIndicator="myDefaultIndicator" defaultLoadingText="Please wait ..." ajaxcache="true"/> 
</s:if> 
<s:else> 
    <sj:head debug="true" compressed="true" jquerytheme="%{theme}" loadFromGoogle="%{google}" ajaxhistory="%{ajaxhistory}" defaultIndicator="myDefaultIndicator" defaultLoadingText="Please wait ..." ajaxcache="true"/> 
</s:else> 
+0

. 어떤 AJAX 요청 유형 'script', 'jsonp'...에 적용되는지 알고 있습니까? –

+0

이 경우에는 플러그인 문서가 잘 설명되어 있지 않지만 jQuery 사이트에서이 문서를 찾을 수 있다고 생각합니다. –

+0

jQuery에 관한 한가지주의 할 점은'$ .getScript()'로 스크립트를로드하고이 설정을 플러그인에서 사용한다고 생각했습니다. 어떻게 [요청을 캐싱하는지]보십시오 (http://api.jquery.com/jQuery.getScript/#caching-requests). –

1

이것은 유닉스 타임 스탬프 (representing today at 16:01 GMT+2)입니다. .

때, 중 (내 생각, IE 캐싱을 처리하기 위해) 파일을 캐싱 브라우저를 방지하기 위해 (Struts2-jQuery-plugin에 의한되지 않음) 기본 jQuery.ajax에 의해 추가됩니다

  1. 가 설정 한 cache: false; 또는
  2. 데이터 유형은 스크립트 (귀하의 경우)이거나 jsonp입니다. the official doc에서

:

캐시 (기본값 : true, dataType 'script'에 대한 false'jsonp')

유형 : 부울 false로 설정하면

, 그것은 강제 요청 된 페이지가 캐시되지 않도록 브라우저에서 편집. 참고 : 설정 cache ~ false은 HEAD 및 GET 요청에서만 올바르게 작동합니다. 이것은 "_={timestamp}"을 GET 매개 변수에 추가하여 작동합니다. 이 매개 변수는 다른 유형의 요청에는 필요하지 않습니다. IE8에서 POST가 GET에 의해 이미 요청 된 URL로 작성된 경우는 예외입니다.

해결 방법 : jQuery ajax 강제로 cache: true을 통해 파일을로드하거나 jQuery를 사용하지 않고 파일을로드하십시오.

+0

감사를 캐시하지 변경됩니다 index.jsp에 아래의 코드를 사용하여 문서

Name ajaxcache Required false Default false Evaluated false Type Boolean Description If set to false it will force the pages that you request to not be cached by the browser. 

에서, 나는 JSP 파일은 JS 파일을 포함 할 때 JSP 파일이 발견 ajax가로드되면 포함 된 js 파일도 ajax를 통해로드됩니다. struts2 jquery 플러그인은 아약스 호출 자체를 만듭니다. 나는 $ .ajaxSetup ({cache : false})을 시도했다. 그러나 그것은 아직도 거기에있다! 다른하실 말씀 있나요 ?! –

+0

예, 'cache : true'를 수행해야합니다! :)'cache : false'는 스크립트와 jsonp의 기본값입니다. –

+0

큰 실수가 있습니다.)'$ .ajaxSetup ({cache : true}); '을 시도했지만 작동하지 않았습니다! 덕분에 –