2014년 12월 11일 목요일

jQuery에서 ajax() 호출 시 response가 항상 똑같은 경우 (ajax GET, PUT method의 caching 방지)

일부 브라우저에서는 jQuery ajax로 GET, PUT method 호출 시
받아온 결과값이 항상 일정하거나 PUT이 제대로 먹히지 않는 경우가 있음.

원인을 몰라 난감하던 차에 아래 사이트 발견

selfesteem님의 [jquery] $.ajax 에서 GET일때 cache가 남는경우...
http://selfesteem.tistory.com/entry/jquery-ajax-%EC%97%90%EC%84%9C-GET%EC%9D%BC%EB%95%8C-cache%EA%B0%80-%EB%82%A8%EB%8A%94%EA%B2%BD%EC%9A%B0

http://stackoverflow.com/questions/367786/prevent-caching-of-ajax-call


위의 사이트를 참조하여
ajax로 GET method 호출 시

cache : false, 를 항상 추가하고

ajax로 PUT method 호출 시

URL + '?' + $.now() 로 해결함.


그리고 이 문제는 Galaxy S2에서 항상 재현된다.


2014년 12월 10일 수요일

jQuery ajax() 사용시 jqXHR의 error code가 0일 경우

jQuery를 사용하여 Ajax를 사용해서 REST API를  잘 호출 하고 있었으나
종종 앱 종료 시 호출되는 Ajax 호출이 error로 처리 되어
서버에서 종료 처리가 되지 않고 앱이 그냥 종료되는 상황이 발생함.

Ajax 호출 코드는 다른 곳에서도 잘 실행되던 거라
종료 처리를 하는 DELETE method가 문제인가 계속 확인을 하던 중
아래 링크들을 확인함.

http://cricri4289.blogspot.kr/2013/10/jquery-ajax-error-code-0.html
http://stackoverflow.com/questions/14313283/jquery-ajax-jqxhr-status-is-always-0


일반적인 경우는 Ajax 호출 후 바로 페이지가 새로고침이 되거나 전환 될 경우
Ajax 호출이 실패하고 error code가 0으로 리턴 될 경우가 있다고 함.
그게 아니라면 실제로 서버 연결이 안되거나 할 경우이고.

암튼 나의 경우는 Ajax 호출 후 바로 앱을 닫아 버려서
미처 Ajax 호출이 완료되지 않은 상태에서 앱이 종료되어 문제가 되었던 경우라서
Ajax 호출이 완료 되어 callback에서 종료 처리를 하고
혹시나 몰라 timeout을 사용해서 종료 처리를 하도록 함.