2013-11-21 4 views
4

나는 HTML5 애플리케이션을 개발 중이다. .manifest 솔루션 덕분에 모든 파일을 캐시하므로 인터넷에 액세스 할 수 없을 때 응용 프로그램을 사용할 수 있습니다.Ajax 요청 및 오프라인 캐시

가능할 때마다 일부 데이터를 서버에 동기화하려고합니다. 변수 navigator.online은 충분히 신뢰할만한 것으로 보이지 않으므로 응답하는 항목이 있는지, 즉 사용자가 온라인 상태인지 여부를 감지하기 위해 AJAX 요청 (jQuery.get() 사용)을 수행합니다.

전체 응용 프로그램이 캐시되는 즉시 인터넷상의 파일에 대한 모든 AJAX 요청이 이유없이 실패합니다. 같은 결과로 Chrome, Firefox 및 Safari (iPad)에서 시도했습니다.

나는 응용 프로그램의 일부 파일 (동시에 캐시 된)의 내용을 얻으려면 jQuery.get()을 사용합니다. 이러한 요청은 완벽하게 작동합니다.

처음으로 같은 출처 문제가 발생했습니다. 그래서 https://graph.facebook.com에게 요청을 보내려고했는데, 그 댓가로 아무것도 얻지 못했는지 알기 위해서였습니다. Chrome 콘솔에서 요청 상태는 '대기 중'이며 0 바이트가 수신되었습니다.

매니페스트를 비활성화하고 캐시를 비우면 전혀 문제가 없습니다.

왜 이것이 일어 났는지에 대한 아이디어 나 힌트가 있습니까?

감사합니다 :)

PS : 영어 내가 만든 수있는 실수를 용서 (및 수정 주시기) 제발, 내 모국어가 아닙니다. :)

+0

'.get()'은 편안한 속기입니다. 하지만 요청을 더 잘 제어하려면 ['.ajax()'] (http://api.jquery.com/jQuery.ajax/) 또는'.ajaxSetup()'과 함께'.get() '을 사용하십시오.] (http://api.jquery.com/jQuery.ajaxSetup/) – Boaz

답변

2

네트워크 섹션이 있는지 확인하십시오. 캐시 매니페스트 파일의 네트워크 섹션은 웹 응용 프로그램이 온라인 액세스를 요구하는 리소스를 지정합니다. *는 모두와 일치하는 와일드 카드입니다.

CACHE MANIFEST 
# 2013-11-21:v1 

CACHE: 
/Content/Site.css 
/Scripts/jquery-1.8.2.js 

NETWORK: 
* 

FALLBACK: 
//Home/Offline 
+0

참고 : 매니페스트를 업데이트 한 후 코드가 swapCache()를 호출하지 않으면 브라우저를 두 번 새로 고쳐야합니다. – LostInComputer

+0

그리고 다른 도메인에 대한 ajax 호출은 어떻게해야합니까? ? (Access-Control-Allow-Origin 헤더에 의해 허용되거나 jQuery의 ajax jsonp 유형을 통해 이루어짐). 이 요청을 수행 할 수 없으며 내 도메인에 * 또는 다른 항목을 넣을 때와는 달리 캐시 매니페스트의 네트워크 섹션에 교차 원점 URL을 넣는 것이 효과가 없습니다. – Ernesto